C语言中int *p[5]与 int (*p)[5]的区别
一、作用不同:
优先级的问题,[]的优先级高于*,这就是为什么后者加了一个(),int *p[5]定义一个指针数组p,讲到底这个p是一个数组,数组内的元素是5个指针,而数组内的每一个指针指向一个int型的变量;int (*p)[5]定义了一个指向5个元素的一维数组的指针。
二、含义不同:
第二个就是这个指针所指的值是一个大小为5个int的数组的首地址。p+1(数组地址+1)代表内存地址下移了5个单位。
三、使用不同:
int (*p)[5];
int a[10][5];
p=&a[1]; // 现在(*p)就等于a[1] 所以 a[1][2]可以表示为(*p)[2]
扩展资料:
二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t
按“列优先顺序”存储时,地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t
存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节
参考资料来源:百度百科-二维数组
int (*p)[5],首先p是一个指针,指向大小为5的数组,因此这叫数组指针。(括号优先)
这个在《C专家编程》里面说的很清楚。你可以看一下。
int (*p)[5] 那么p是一个指向数组的指针
还是不懂。第一个我懂。第2个不懂。
int a[5]
这里a的类型为 大小为5的数组
而int (*p)[5] 就是一个指向上边数组的指针
就是说*p就是a
就是说(*p)[0] 就是a[0]