为什么C语言中*(a+i)+j能表示a[i][j]的地址

a不是地址吗,那*(a+i)应该是取a[i][0]值,为什么这里是地址

int a[3][4]; //假设定义一个3行4列的二维数组,所谓二维数组就是数组的数组
a[0]、a[1]、a[2]是数组a的元素,而这个元素是数组,而不是我们通常认为的基本数据类型的数据
所以*(a+i)就是获取数组a中第i个元素,等价于a[i],而a[i]本身又是一个包含有4个int型数值的数组,a[i]是这个一维数组的数组名,我们知道数组名的本质是一个地址,是数组首元素地址,所以
*(a+i)+j就是表示下表第i行的第j个元素的地址了。所以,
*(a+i)+j表示的含义是元素a[i][j]的地址,也可以用a[i]+j来表示。
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-01-17
int a[2][3]={10,20,30,40,50,60};
printf("%d ",*(*(a+1)+2));
以上的引用能够输出60
因为a是二维数组名,所以它是指向指针的指针(二级指针)。
*(a+1)就是a[1],它是一个一维数组,也是一维数组的首地址(指向一维数组首元素的指针)。*(a+1)+2就是a[1][2]的地址,*(*(a+1)+2)就是a[1][2]。
第2个回答  2018-01-17
*(a+0)取出a[0]的值
a[0]的元素又是一个一维数组
因此*(a+0)取出的就是这个一维元素的首地址
那么*(a+0)+0表示: 一维数组a[n]中, a+0数组元素a[0]的地址
*(a+0)+1表示一维数组的1号数组元素的地址

为什么C语言中*(a+i)+j能表示a[i][j]的地址
(a+i)+j就是表示下表第i行的第j个元素的地址了。所以,(a+i)+j表示的含义是元素a[i][j]的地址,也可以用a[i]+j来表示。

C语言计算机
(a+i)+j就是一维数组a[x]的第i个元素,即另一个一维数组的第j个元素的地址。这样说吧:a[x][y]可以看成一个一维数组a[x],而这个数组里存放的是地址,是另一个一维数组的地址,所以前面要加*。明白了吗?

c语言指针*(*(a+i)+j)什么意思,*(a+i)为什么是地址啊,a不应该已经是地 ...
其实是可以把*(*(a+i)+j)看出是二维数组的一个值:a[i][j]。(a+i)看出a[i]这是一维地址,a是二维地址。对于a+1不好判断,以数组解释不通,以指针又解释德通,我就不评价了。

关于对数组元素a[i][j]的引用:*(*(a+i)+j)为什么也正确呢,*(a+i...
a+i表示相对于地址a偏移 i 个单位的地址,与a[i]等同,(a + i)表示对 相对于地址a偏移 i 个单位的地址 取内容,即表示对a[i] 的地址 再取内容,因为a[i] 与&a[i]等同,所以取出的为a[i]的地址,也与a[i]等同,为同一地址。而*(*(a+i)+j)表示二维数组第 i 行第 j 列...

C语言中 二维数组@a[i][j]的地址为什么可以表示成*(a+i)+j难道*(a+...
a是一个二维数组,a[i]表示其中的一行,是个一维数组,a[i][j]表示一行里面的一个元素。(a+i)就是a[i],是一个一维数组,当然表示一个地址,表示这个一维数组里面的第一个元素a[i][0]的地址。

*(*(a+i)+j)和(*(a+i))【j】怎么理解啊!
C和C++中,p[i]和*(p+i)是等价的。所以*(*(a+i)+j)和(*(a+i))[j],和a[i][j]都是等价的

*(*(a+i)+j)中*(a+i)+j 代表什么意思? \/\/ 为啥最外面还要*求值呢
(a+i)+j代表的是第 i行,j列的那个元素,这个没有问题吧。而那个元素是指针。不是值,所以再加*取值。 这和普通的 *p=a;一个意思。主要原因是数组里面放的全部都是指针,你可以看你定义时候的声明就知道了。

c语言:为什么&a[i][j]的值是&(a+i)+j,,,求详解!!!
首先,我们知道&a[i][j]是取的a[i][j]的地址,它是一个二维数组。对二维数组的内存分配,我们可以理解为【先存行,再存列】也就是说我们可以将int a[3][4]的存储看作是先存的一位数组a[0],a[1]和a[2],而每一个一维数组,又是一个数组,即a[0]行包括a[0][0],a[0][1],a...

a+ i+ j是不是a[ i][ j]呢?
是的,两种不同的写法,本质都是取那个地址存在的值。a[i][j]是第i行(0算起)第j列(0算起)的元素值。a+i是第i行的行指针,那么*(a+i)就是第i行第0个元素的指针,自然*(a+i)+j就是第i行的第j个元素的指针了,最后通过这个指针用*取出来的值*(*(a+i)+j)不就是第i行第j列的...

在二维数组中为什么 *(a+i)+j 代表的是地址而不是值元素?
可以这么说吧, 在二维数组中,数组名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][j]的值.

相似回答