在二维数组里 地址a[i]和地址*(a+i)的问题

a[i]和*(a+i) 表示的是同一个地址,书上说a[i]是行地址,那么*(a+i)这种形式只单单是a[i]的一种变形吗而已?也就是说a[i]是c语言本身规定的行地址的表示方法,而a[i]又可以拆成*(a+i),所以*(a+i)是由a[i]来的,还有
a[i]和&a[i]他们两个的地址也是一样的,那么是不是&a[i]是一种无所谓的东西,还是说取一个地址的地址就是该地址本身呢??

a[i]和*(a+i) 表示的是同一个地址,对于数组来说,计算机计算地址都是以*(a+i)进行计算,也就是换算成指针的形式.
对于二维数组,你要搞清楚所取的地址是对谁而言的.很显然,a[i]是第i行的地址,这是相对于行而言的,也就是说,a[i+1]就是下一行的地址了.
&a[i]是不一样的,首先,a[i]是一个常量,不同的只是它只是一个地址,而&a[i]只是取这个常量的地址的物理地址,也就是物理内存中的真实地址.你可以用输出函数输出一下看看.
二维数组里,a[i]是一个数组的首地址."&"是求地址的,&a[i]。。求一个地址的地址,还是地址。。一样的东西。
a[i] 是地址,(a+i) 是个常量了,我们把他声明成指针让他来指向它不就可以拉 *(a+i) .
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-09-21
a[i]和*(a+i) 表示的是同一个地址,对于数组来说,计算机计算地址都是以*(a+i)进行计算,也就是换算成指针的形式.
对于二维数组,你要搞清楚所取的地址是对谁而言的.很显然,a[i]是第i行的地址,这是相对于行而言的,也就是说,a[i+1]就是下一行的地址了.
&a[i]是不一样的,首先,a[i]是一个常量,不同的只是它只是一个地址,而&a[i]只是取这个常量的地址的物理地址,也就是物理内存中的真实地址.你可以用输出函数输出一下看看.
第2个回答  2007-09-21
二维数组里,a[i]是一个数组的首地址."&"是求地址的,&a[i]。。求一个地址的地址,还是地址。。一样的东西。
a[i] 是地址,(a+i) 是个常量了,我们把他声明成指针让他来指向它不就可以拉 *(a+i) .
第3个回答  2007-09-21
a[i]是行地址,这句话比较合适,因为对于你的 问题来说只是一维数组,而对于多维数组来说,就更准确,c语言里数组是按行存储的。
第4个回答  2007-09-21
你可以理解为[]是一个重载的操作符,它的实现其实就是去了*(a+i)。

你要理解地址是一个什么东西,a[i]表示一个地址,就是说a[i]本身可以当作一个变量,它里面存了一个整数,这个整数呢,就是内存里的一个地址。那么&a[i]就是表示这个变量的地址。

在二维数组里 地址a[i]和地址*(a+i)的问题
a[i]和*(a+i) 表示的是同一个地址,对于数组来说,计算机计算地址都是以*(a+i)进行计算,也就是换算成指针的形式.对于二维数组,你要搞清楚所取的地址是对谁而言的.很显然,a[i]是第i行的地址,这是相对于行而言的,也就是说,a[i+1]就是下一行的地址了.&a[i]是不一样的,首先,a[i]是...

二组数组与指针中a[i]和*(a+i)等价问题
你要记住 a[i]和*(a+i)等价的,但在二维数组中表示的是 地址。在一位数组中是直。你可以这样理解,一个一位数组,他的每个元素都是一个数组,那他就是一个二维数组,那么a[i]或*(a+i)就表示相应的那个元素,而这个元素是一个数组,当然a[i]或*(a+i)指的就是这一数组的首地址,以...

*(a+i)与a[i]与(a+i)是一样的地址,为什么?
呵呵,你错了,对于数组a[i],a表示该数组的起始地址,即a=&a[0], 所以 *(a+i)表示a+i指向的数组元素,*(a+i)=a[i]。对于二维数组,&a[0][0]就不能用a表示了,而是用a[0]+0表示,二维数组可以看成一维数组,不过它的每一个数组元素又是一个一维数组,比如a[3][4]的第一行...

二维数组中,a+i表示第i行的地址,那为什么*(a+i)也表示第i行的地址。
a+i和*(a+i)的值相同没错,但它们的类型不一样,代表的意义也不一样。a+i还是2维指针,*(a+i)则是一维指针。编译器对它们的解析和操作是不一样的。

*(a+i)与a[i]是一样的地址,为什么?
*(a+i)与a[i]是一样的地址应该是说他们指向的都是同一个内存单元,也就是说*(a+i)指向的值的地址,与a[i]指向的值的地址都是一样的。也就是说他们得到的值是一样的。这里不是说他们得到的是一个内存变量的地址还是内存变量的值,只是说明他们是一样的,得到的值一样,换句话说就是一样的地址。(一样...

...吗,书上说a+i是a[i]的指针,既然这样,那么*(a+i)为什么还是
a+i其实就是&a[i],肯定是地址 (a+i)其实就是a[i],如果a是二给数组的数组名,a[i]就肯定是地址(等同于&a[i][0]),如果a只是一维数组(指针数组除外)的数组名,a[i]就不是地址(原因是:二维数组可以看作是多个一维数组组成,即数组的数组)(a+i)+j就是&a[i][j],如果数组a是二维...

...+i,p+i,引用a[i],*(a+i)(这不应该是地址吗
要引用数组中各个元素。a[i]是数组专用的方法,它本身就是指a往后偏移i个长度内存空间里存放的内容,因此用&取地址就变成了该内容对应的地址;也可以用*(a+i),a+i指从地址a偏移i个长度(此长度不是字节,取决于数组存储的元素类型)的地址(注意此时它不是指里面的内容),因此加上*以取到里面的内容。也就是说a...

为什么.一个数组元素a[i]与a+i的表示等价?
只有a是二维数组时,a[i]与a+i才等价,他们都表示第i行的首地址,且类型相同。当a为一维数组时,他们并不等价。

C语言中的二维数组里a+1和*(a+1)为什么都是地址
这里的a是二维数组中的二级指针 数组名为a[0]的一维数组(表示行)也是数组名为a的一维数组(表示列)后面的1表示行数组移动1行 0表示列的移动 所以是1行0列的地址 (a+1)中a是二级指针 取值二级指针是一级指针 一级指针指向的一维数组(二维数组中的行)一维数组移动一位只能是向下移动也就是...

二维数组的数组名和地址问题
a+1, 是 a数组第2行的首地址,即 &a[1][0]。 等于 二维数组 的首地址 + 一行占用的内存字节数。&a + 1, 不是简单的 首地址 加 1,而是 首地址 + 整个数组占用的内存字节数。--- 也就是说 此1 非那1:a+1, 是 加一行大小 &a + 1, 是 加整个数组大小 用式子计算时要注...

相似回答