int (*p)[3]; //指向一个数组,数组有3个元素,每个元素是一个int型整数
int a[3][3];
p= a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]
p= &a; //这样是错误的
如果是下面这样:
-
int (*p)[3]; //定义数组指针
-
int a[3]; //定义一维数组
-
p= &a; //需要&符
-
p= a; //这样是错误的
这里为什么与要加上&呢 因为 p 本质是一个指向整个数组的指针 &a 代表的是整个数组的首地址,指向了整个数组 a代表的是数组首个元素的地址 是一个单纯的地址 (&a 与 a在数值上相同) 而在C语言中,赋值符号“=”号两边的数据类型必须是相同的,p= &a; 是将整个数组的首地址赋值给p而p= a; 则是将一个指针赋值给p 这样子是错误的
同理,如果是二维数组 a则直接表示一个一维数组的首地址(a[][3]) 而&a 则表示一个二维数组的首地址 所以赋值会出现错误
-
int *p[3]; //定义指针数组
-
int a[3];
-
p[0] = a[0]; //p第一个元素存放a的第一个元素的地址
-
p[1] = a[1]; //p第二个元素存放a的第二个元素的地址
-
————————————————
版权声明:本文为CSDN博主「Z小旋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/as480133937/article/details/92122982