z*******8 发帖数: 30 | 1 昨天看MIT 6.828课程,发现有这么一个语法:
int a[4];
int *c;
c = a;
*(c + 2) = 301;//this is fine
3[c] = 302;//????
最后一行我不太明白是什么意思,也从来没有遇到这样的语法。但是linux下gcc编译、
运行出来的结果正确,并且3[c]和c[3]的效果一样,都是访问c[3]元素。
所以想请教各位,这种用法的依据是什么?标准里或者哪儿有比较权威的解释?多谢多
谢!
源文件:
http://pdos.csail.mit.edu/6.828/2012/labs/lab1/pointers.c
第23行 |
l*****a 发帖数: 14598 | 2 3[c]=3+c=c+3=c[3]
just a guess
【在 z*******8 的大作中提到】 : 昨天看MIT 6.828课程,发现有这么一个语法: : int a[4]; : int *c; : c = a; : *(c + 2) = 301;//this is fine : 3[c] = 302;//???? : 最后一行我不太明白是什么意思,也从来没有遇到这样的语法。但是linux下gcc编译、 : 运行出来的结果正确,并且3[c]和c[3]的效果一样,都是访问c[3]元素。 : 所以想请教各位,这种用法的依据是什么?标准里或者哪儿有比较权威的解释?多谢多 : 谢!
|
d**********x 发帖数: 4083 | 3 E[I] <==> *(E + I)
月经了
【在 z*******8 的大作中提到】 : 昨天看MIT 6.828课程,发现有这么一个语法: : int a[4]; : int *c; : c = a; : *(c + 2) = 301;//this is fine : 3[c] = 302;//???? : 最后一行我不太明白是什么意思,也从来没有遇到这样的语法。但是linux下gcc编译、 : 运行出来的结果正确,并且3[c]和c[3]的效果一样,都是访问c[3]元素。 : 所以想请教各位,这种用法的依据是什么?标准里或者哪儿有比较权威的解释?多谢多 : 谢!
|
z*******8 发帖数: 30 | 4 这倒是一个很靠谱的解释哎,因为好像C语言对待数组不就是pointer + offset么
也就是说,反正在编译器中,数组名是一个地址(指针),后面是个偏移量。它也不管
谁是谁,反正两个一加,就行了?
【在 l*****a 的大作中提到】 : 3[c]=3+c=c+3=c[3] : just a guess
|
z*******8 发帖数: 30 | 5 多谢!
应该是这么解释
【在 d**********x 的大作中提到】 : E[I] <==> *(E + I) : 月经了
|