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]。

a+i表示第i行首地址,*(a+i)表示第i行第0列元素这样说才是对的。 第i行首地址和第i行di0列元素地址是一个意思。不明白可以追问

因为*(a+1)+2的结果是一个常量,不能再用地址去指向。

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

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

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

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

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

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

对于二维数组的指针只需记得两个模版: s+i,s[i],序号为i行的首地址;*(s+i)+k,*(s[i])+k元素s[i][k]的地址 下面来看选项:A。*(a+i)+j表示元素a[i][j]的地址,加上指针运算后可得a[i][j]的值,符合题意,正确。 B。没有这种写法 C。套用模板...

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