int *[] 和int (*)[]的区别?

如题所述

相当于int *p[5]和int (*p)[5].
区别是:
前者int *[],是一个指针数组,加入中括号里面是5,那么就是说你所定义的这个数组里面的5个变量都是指针。就好比你定义int a[5]类似,这5个元素都是可以存放int值的变量。int *p[5]就是定义了5个元素,每一个元素都是指针,可以指向变量。也可以写作int (*p)[5];
后者int (*)[],是一个行指针。定义了之后就可以这样用printf("%d",*(*(p+i)+j));为什么是行指针呢?就是告诉计算机我这里定义了一个指针,如果移动一下你就要给我移动一个长度为5的单位。因为二维数组在内存中不是像我们逻辑思维一样存储行行列列的,它是一下子甩开一大串存完第一行存第二行。这个行指针就是应用在那个j上面,j每每加+1实际上就是向后移动了5个单位,逻辑结构上实际就是移动了四行。

还有就是区分int (*p)(int);这是一个指向函数的指针。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-06
其实也就是int *p[ ] 和int (*p)[ ],因为优先级的关系,括号的优先级比单目运算符高。
所以前者可以写成int *(p[ ]),如果把p[ ]看成一个整体,则可以发现其实就是定义一个指针,这个指针指向某个地方,再看个体,其实就是一个全是指针的数组。所以这是定义”指针数组“。
  后者可以把*p看成一个整体,其实就是一个数组,只不过这个数组的地址给了p,也就是p指向这个数组。所以这是定义”数组的指针“。来自:求助得到的回答
第1个回答  2012-12-06
int *[]是一个数组,此数组有内容确定,每个元素都是int*类型
int (*)[]一个指针变量。 int (*)[] 中的(*)是一个指向数组的指针,此数组有[]个int类型的元素本回答被网友采纳
相似回答