llgd.net
当前位置:首页 >> 指针指向二维数组,A+i表第i行首地址,为什么加了... >>

指针指向二维数组,A+i表第i行首地址,为什么加了...

二维数组每行的首地址分别为a[0],a[1]……a[i],*(a+0)是a[0],*(a+1)是a[1]……*(a+i)是a[i]。a+i是地址,但不代表第i行的首地址a[i]。

在C语言中规定,数组名代表的是数组首元素地址。a是二维数组的数组名,因此,在二维数组中*(a+i)表示的是第i+1行0列元素的地址,即a[i][0]的地址。而a+i表示的是第i+1行的首地址。

a+i和*(a+i)的值相同没错,但它们的类型不一样,代表的意义也不一样。a+i还是2维指针,*(a+i)则是一维指针。编译器对它们的解析和操作是不一样的。

所谓*(a+i)等价于a[i],而a[i]是一个数组名,那么a[i] = &a[i][0],数组名等与首元素的地址

a+i其实就是&a[i],肯定是地址 *(a+i)其实就是a[i],如果a是二给数组的数组名,a[i]就肯定是地址(等同于&a[i][0]),如果a只是一维数组(指针数组除外)的数组名,a[i]就不是地址(原因是:二维数组可以看作是多个一维数组组成,即数组的数组) *(a+i...

假设 int a[][3]={1,2,3,4,5,6},b; b=*(*(a+1)+1); a是个二维数组,表示二维数组a的地址,a[0]、a[1]可看作是2个一维数组,分别是一维数组a[0]、a[1]的地址,a[0]的值为{1,2,3},a[1]的值为{4,5,6},也就是a[0][0]的值为1,a[1][0]的值为4,依此...

可以这么说吧, 在二维数组中,数组名a指向二维数组的第一行,就是&a[0]. a+i就是代表第i行地址,即&a[i]. 而*(a + i)是求第i行首元素的值,就是a[i]. 这时指针从指向行元素转为指向列元素.*(a + i)+j就是a[i]+j,是a[i][j]的地址. *(*(a + i)+j)是a[i...

二维指针是指向指针的指针... 比方说int a[2][2]; 那么 a就是一个指针,他的值指向a[0],即a[0]的内存地址. a[0]也是一个指针,所以a是一个指向指针的指针. a[0]的值指向a[0][0],即a[0][0]的地址. 如果将数组用指针访问的话: a[i][j] = *(*(a+i)+j)...

首先二维数组是不是可以看成几个一维数组的结合 比如a[3][4]是不是代表3个一维数组,一维数组的大小是4 那么第一个数组的数组名是a[0],然后a[0]这个数组里面有四个元素分别为{a[0][0],a[0][1],a[0][2],a[0][3]},第二个数组名是a[1],以此类推 二...

a表示一个二维数据,a+i表示的是a[i]的地址,*(a+i)表示a[i][0]的地址,然后*(a+i)+j才表示a[i][j]的地址。 a表示二维,加*表示一维,所以要加*。

网站首页 | 网站地图
All rights reserved Powered by www.llgd.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com