【发布时间】:2019-01-24 18:40:39
【问题描述】:
我有以下程序
#include<stdio.h>
int main() {
int a[3][3]={{1,2,3},
{4,5,6},
{7,8,9}};
printf("%p\n",a);
printf("%p\n",a[0]);
printf("%p\n",*(a+0));
}
它给了我以下输出:
6356716
6356716
6356716
我期待,给定一个基地址,例如6356716,然后*(6356716+0) 将产生该位置内的值(即1)。
所以,如果一个数组名等价于一个指向它的第一个值的指针,就像上面的表达式,打印'a'应该打印指向它的第一个值的指针,即a[0](它本身衰减到它在位置的第一个元素6356716)。在那种情况下,为什么取消引用在这里不起作用,*(a+0) 评估为
*(6356716+0)?
【问题讨论】:
-
C/C++ == UB请选择一种语言 -
此代码中的任何内容实际上都没有引用 值(即 1)。第二次和第三次打印是等效的。
-
不一样所以你的问题没有意义。
-
@pmg 很好的类比。只是
*(a+0)和a[0]一模一样。
标签: c++ c pointers multidimensional-array