c语言数组指针问题
<c语言程序设计教程>杨路明主编版。。里面说二维数组第i行第j列的元素可以表示为
*(&a[0][0]+n*i+j)。。。可是我不能理解。。希望大虾们解释一下。
&a[0][0]不是0行0列第一个元素的地址吗?为什么加上n*i和j就变成第i行第j列的元素了呢?
[解决办法]
第i行是不是有n个元素?
[解决办法]
“加上n*i和j” 的意思就是指针偏移n*i+j 个量。所以首地址加偏移量就得到第i行第j列的元素了。
[解决办法]
因为数组是连续存储的,不管有几行几列,都是第一行结尾挨着第二行。。。。等等
*(&a[0][0]+n*i+j)
先取出第一个元素的地址,也就是数组的首地址,找到对应的偏移 再取出值,就是你要找的元素了
[解决办法]
ls正解
[解决办法]
对 是这样 说的真清楚
[解决办法]
int a[0][0]
这里a等价于const int **
a[0][0]其实是**(int **)即int值
&a[0][0]其实是&(**(int **))即*(int**)即int*,是个数组指针。
楼主好好理解一下,绕来绕去的
[解决办法]
[解决办法]
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
[解决办法]
围观中!!!!!!!!!!
[解决办法]
二维数组的存储还是按一维存储的,所以首地址加上偏移量就是第i行,第j列的元素了
[解决办法]
数组在内存中是连续存放的 a[0][0] a[0][1]...a[1][0] a[1][1]... 所以加上n*i+j 得到a[i][j]的地址
[解决办法]
内存是“平的”(线性的)。
建议debug。