关于二维数组和指针的关系
本人初学,对于这一块内容看的有些迷糊,哪位精通的大哥可以讲讲
int a[3][4];
上面的数组的任意元素可以表示成 *(*(a+i)+j),这句不明白,可以讲下么,一维数组可以看懂,这里实在比较难看
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
本人初学,对于这一块内容看的有些迷糊,哪位精通的大哥可以讲讲
int a[3][4];
上面的数组的任意元素可以表示成 *(*(a+i)+j),这句不明白,可以讲下么,一维数组可以看懂,这里实在比较难看
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
编译器对多维数组进行处理的思想就是对其进行降维(把三维的降到二维,把二维降到一维)。
下面的这些转换,你仔细想一下吧!
int a[i];
a[i] = *(a+i);
int a[i][j];
a[i][j] = *(a[i]+j) = *(*(a+i)+j);
int a[i][j][k];
a[i][j][k] = *(a[i][j]+k) = *(*(a[i]+j)+k) = *(*(*(a+i)+j)+k);
想象下 a 就像是个平面矩阵图 i 表示横向 j表示纵向 任意点就是横向和纵向交叉点
二维数组在内存中就像个尺子,大的单位按顺序存储一个一维数组(地址值),每个单位里面又存储着一个一维数组(元素值)。
看<<C专家编程>> 彻底除掉这方面的疑惑
感谢二楼的,讲的很清楚