二组数组与指针中a[i]和*(a+i)等价问题

a[0]和*(a+0)等价,a[1]和*(a+1)等价,a[i]和*(a+i)等价.因此a[0]+1和*(a+0)+1的值都是&a[0][1]

怎么理解a[i]和*(a+1)等价,是把它放到一组数组中去理解吗?*(a+1)怎么可以表示地址?"*"号不是表示值吗??

你要记住 a[i]和*(a+i)等价的,
但在二维数组中表示的是 地址。
在一位数组中是直。
你可以这样理解,
一个一位数组,他的每个元素都是一个数组,那他就是一个二维数组,
那么a[i]或*(a+i)就表示相应的那个元素,而这个元素是一个数组,
当然a[i]或*(a+i)指的就是这一数组的首地址,
以此推之,a[i]+j或*(a+i)+j就是&a[i][j]
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-09-21
*在指针面前是值,就是把他当成一位数组来理解,a是一个首地址,首地址+1,就是在首地址后加一个存储单元。所已相等
第2个回答  2008-09-21
11

二组数组与指针中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才等价,他们都表示第i行的首地址,且类型相同。当a为一维数组时,他们并不等价。

C语言中,a[1]为什么和*(a+1)等价?
a[1]是数组的第2个元素(第一个是a[0]), 所以 a[1]的地址是数组的首地址+1,数组的首地址也可以用 a 表示,所以 a+1是 a[1]的存放地址,所以*[a+1]=a[1]

为什么.一个数组元素a[i]与a+i的表示等价?谢谢啦
a表示的数组首地址,指针和数组在一定程度上是一样的。所以a[i]和*(a+i)指向的元素是一样的。a[i]表示给定了数组首地址的存储位置a 寻找数组中的第i+1个元素(数组第一个元素是a[0]),而*(a+i)就直接让指针指向数组第i+1个元素。

*(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]的第一行...

C语言、二维数组指针中的 * 和 &
不难理解,这代表的是第i行的首地址,也就是第i行的第一个元素的地址,如书所说,a+i,a[i],&a[i][0]的值是一样的,还有一个是*(a+i),这个就需要转转脑筋了,二维数组用指针怎么表示?用二维指针即:**a,那么a[3][4]这个数据(注意是一个数值)用指针怎么表示呢?*(*(a+3)+...

*(*(a+i))与*(a+i)
int (*p)[n]是一个数组指针,可以当成一个二维数组看待。*(p+i)代表的是第i行的首地址,是整行元素,*(*(p+i))代表的是第i行第一个元素的地址,同理*(*(p+i)+j)代表的是第i行第j列的地址。本人也是新手,回答的不对的地方还请多多包容。。。

请教一个c++指针问题
a[i]跟*(a+i)等价,一个是数组写法,一个是指针写法 同理,*(pa+i)跟pa[i]也等价,而pa就指向a,pa跟a等价 所以,4个写法,是等价的

数组与指针联合使用的疑惑
上面说过a是二级指针,int a[5][6];把定义的a看作指针,实际上指针类型是 int (*)[6],即它是指向一个数组的指针,对这样的指针进行加法运算是:a + i 实际计算为 a + i * 6 * sizeof(int)。a指向第一行数组首地址,a + i 就指向第i行首地址,而不是将a扁平化成一维数组后的第i...

...数组元素a[i][j]的引用:*(*(a+i)+j)为什么也正确呢,*(a+i)等价...
首先a是二维数组的首地址,也是二维数组第一行的首地址,是个常量指针,a[i]也是地址,表示第 i 行的地址,a+i表示相对于地址a偏移 i 个单位的地址,与a[i]等同,(a + i)表示对 相对于地址a偏移 i 个单位的地址 取内容,即表示对a[i] 的地址 再取内容,因为a[i] 与&a[i]等同...

相似回答
大家正在搜