int (*p)[3]指针的指向问题
目前书上有3个说法有inta[3]intb[3][2],int(*p)[3]可以指向一维数组,如int(*p)[3]=&a(不是a)3表示有3个整数;int(*p)[3]...
目前书上有3个说法 有int a[3] int b[3][2],int(*p)[3] 可以指向一维数组,如int(*p)[3] =&a(不是a)3表示有3个整数;int(*p)[3] 可以指向二维数组,如int(*p)[3] =&b 3表示二维数组有3个行也就是3个一维数组;int(*p)[2] 可以指向二维数组中的某个一维数组,如int(*p)[2] =&b[0] 在这种情况下可以用*(p[i]+j)或*(*(p+i)+j)表示某个元素(这里不能用3了 不好改前面的话了 就在这换一下吧)2表示二维数组的第一个一维数组的两个整数。请问这三种说法都正确吗 麻烦懂的说说给个正解 谢了
展开
2个回答
展开全部
你的3个说法我没断好句啊。。。按我的理解解释一下p指针吧,再自己判断那3个说法。
int a[6];
int b[2][3];
int c[3][2];
int (*p)[3];
这里p是一个指针,这个指针指向的区域有3*sizeof(int)大小。
p = &a; p = b; p=c; 编译器都不会报错。
p = &a的情况,p[0][0] == a[0], p[1][0] == a[3],可以认为是把线性数组二维化。
p = b的情况,p跟b可以认为是等价的。
p = c的情况,这个基本上可以认为是把数组的行数和列数调换,具体内容不变。
为了少费点脑细胞,尽量使用p = b;其他两个没有特别的算法要求不建议使用。
记住了指针指向区域的大小后,这样就能清楚每个操作具体的内存位置,然后该怎么用就怎么用吧。
int a[6];
int b[2][3];
int c[3][2];
int (*p)[3];
这里p是一个指针,这个指针指向的区域有3*sizeof(int)大小。
p = &a; p = b; p=c; 编译器都不会报错。
p = &a的情况,p[0][0] == a[0], p[1][0] == a[3],可以认为是把线性数组二维化。
p = b的情况,p跟b可以认为是等价的。
p = c的情况,这个基本上可以认为是把数组的行数和列数调换,具体内容不变。
为了少费点脑细胞,尽量使用p = b;其他两个没有特别的算法要求不建议使用。
记住了指针指向区域的大小后,这样就能清楚每个操作具体的内存位置,然后该怎么用就怎么用吧。
更多追问追答
追问
p[1][0]是 a[2]吧? 另外 p能指向二维数组吗 p=&b
追答
p指向区域的大小是3*sizeof(int),p++以后,指向的区域会移动3*sizeof(int),也就是a[3]了。
p指向二维数组的赋值不需要再取地址了,直接p=b就可以了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询