在二维数组里 地址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]就是表示这个变量的地址。