数组指针 : int(*p1)[n] (本质是指针)
int(*p1)[n]: [] 的优先级本身高于 * 的优先级,()优先级高于*,高于[]。所以先执行()里的内容,变量p1首先和*结合,所以p1是一个指针,然后指针指向一个整型一维数组,这个数组的长度是n.(也可以说这个长度是p1的长度,执行p+1时,p要跨过n个整型数据的长度->sizeof(数据类型int)*n)。
既然说p1本质是一个指针,那么他的大小是4个字节(在32位平台上指针大小永远是4字节,65为平台上则是8个字节。)
至于说它指向的数组占多少字节,具体要看数组的大小——>(大小位sizeof(数据类型)*n)
int修饰的是数组的内容,即数组的每个元素,数组在这里并没有名字,是一个匿名数组。
在内存中如下图存放。
可以p1的类型可以理解为 int(*)[n]p1 int(*)[n]是指针类型指向一个匿名整型数组,数组长度位n。
指针数组:int*p2[n] (本质是数组)
由上符号优先级可知p2先和[]结合形成数组,数组中存储的是n个int*型的指针。
数组大小由数组长度n决定(大小4n,因为指针在32位平台上大小位4字节)。
int*修饰的是数组里的内容,即数组里村的每个元素,数组名是p2。
在内存中如下图存放。
总结:
数组指针本质是指针,指针指向的一个匿名数组。
指针数组本质是数组,数组里存放的都是指针。
想要进一步了解 数组,指针,数组指针,指针数组传参的可以查看此链接。点击打开链接
谢谢