最近看书看到二维数组与指针的章节,将一个二维数组名字赋值给一个指向整形数的指针,咋看没毛病,其实还是数组与指针的概念没有理清楚,先放代码。 #includeint Array[1][2]={1,2}; int main...
最近看书看到二维数组与指针的章节,将一个二维数组名字赋值给一个指向整形数的指针,咋看没毛病,其实还是数组与指针的概念没有理清楚,先放代码。
#includeint 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,就是类型不匹配。
用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数 正确答案: D 你的答案: D(正确) int *a[10]; int (*a)[10]; int (*a)(int); int (*a[10])(int); int (*a...
用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数
正确答案: D 你的答案: D(正确)
int *a[10];
int (*a)[10];
int (*a)(int);
int (*a[10])(int);
int (*a[10])(int); //函数指针的数组,指向有一个参数并且返回类型均为int的函数的数组
int *a[10] :(指针数组)。数组a里存放的是10个int型指针
int (*a)[10] :( 数组指针)。a是指针,指向一个数组。此数组有10个int型元素。
int (*a[10]) (int)
这样的表达式可以遵循这样的规则:从右向左,由近及远,括号优先;比如
从a符号开始。其右边是[10],说明a是个数组,其中存了十个元素。
再看a的左边是一个*。