发布网友 发布时间:2022-04-20 06:21
共2个回答
热心网友 时间:2023-08-06 02:11
C/C++的静态数组语义是相同的。数组名可以表示整个数组(例如在sizeof和&运算符作用下);更多情况下退化为指针,表示首个元素的地址。在语言特性上C和C++都不直接支持*数组。通常所谓的(静态的)*数组是指嵌套数组,也就是元素为数组的数组。
----
对于二维数组a,第一维下标i和第二维下标j,*(a+i)+j可以这样理解:
a表示二维数组的首地址;
*(a+i)等价于a[i],是a的一个直接元素,这个元素本身是一个一维数组,等于&a[i][0](LZ“*(a[0]+1)就是a[0][1]的地址”有误,应为a[1][0]的地址);
*(a+i)+j等价于(*(a+i))+j,表示上述数组的下标为j的元素的地址,即&a[i][j]。
----
bee99635表达方式中有错误。
a[0][1]的地址应该可以有以下的表达方式:
&a[0][1]、&a[0][0]+1、&(&a)+1、&(*(a+0))[1]、*(a+0)+1、0[a]+1、&0[a][1]等。(下标和数组名互相交换和交换前等价,但仅在部分编译器中有效。)
----
PS.不建议看谭某人的书,容易越看越糊涂。
====
[原创回答团]
参考资料:原创
热心网友 时间:2023-08-06 02:11
a[0]+1是a[0][1]元素的地址,那么,*(a[0]+1)就是a[0][1]的地址
这句话我就无法理解了,你不觉得这句话很矛盾么?
a[0][1]元素的地址表达方式有以下几种:
&a[0][1]、a[0]+1、*(0+1)+1、&[0][0]+4*0+1、a[0]+4*0+1
建议看看外国教材
老谭的教材里也是有不少错误的