版权声明:本文为博主原创文章,未经博主允许不得转载。个人博客:www.blogtextbook.com https://blog.csdn.net/DZRYWYBL/article/details/90048533
最近看书看到二维数组与指针的章节,将一个二维数组名字赋值给一个指向整形数的指针,咋看没毛病,其实还是数组与指针的概念没有理清楚,先放代码。
#include <stdio.h>
int Array[1][2]={1,2};
int main(void) {
int *p;
//p = Array; 两边的类型不一样不能直接赋值
if(*Array == Array[0])
{
printf("OK\n");
}
return 0;
}
首先int *p定义了一个指向整形变量的指针。
int Array[2][2]={1,2,3,4}
这个语句说明Array是一个数组,该数组拥有1个数组类型的元素,其中每个元素是一个拥有2个整形元素的数组。
Array数组名代表指向第一个元素的指针,而该元素是一个数组,立即推--->Array是一个指向数组的指针。而P是一个指向整形变量的指针,两者类型都不一致,所以 p = Array; 是错误的。
下面我又做了一个变换*Array就是指向第一个数组中的第一个整形数的指针了,更容易理解了,上述代码最终输出OK。
如果上述代码不注释则会提示:error: cannot convert ‘int [1][2]’ to ‘int*’ in assignment,就是类型不匹配。