【发布时间】:2015-09-15 06:24:56
【问题描述】:
在问题Find size of array without using sizeof in C 中,提问者通过获取地址然后将数组索引指定为 1 来将 int 数组视为 int 数组的数组:
int arr[100];
printf ("%d\n", (&arr)[1] - arr);
该值最终成为arr 之后的 100 个元素的“下一个”数组中第一个元素的地址。当我尝试这个类似的代码时,它似乎没有做同样的事情:
int *y = NULL;
printf("y = %d\n", y);
printf("(&y)[0] = %d\n", (&y)[0]);
printf("(&y)[1] = %d\n", (&y)[1]);
我最终得到:
y = 1552652636
(&y)[0] = 1552652636
(&y)[1] = 0
为什么(&y)[1] 不是指向y 之后的int 的“next”指针的地址?
【问题讨论】:
-
这么多未定义行为的实例……请先阅读初学者的 C 入门指南。这是完全错误的(您对输出的期望也是如此)。
-
最终,指针不是数组,数组也不是指针,即使它们密切相关。
-
(&arr)[1] - arr是一个相当有问题的代码......人们不应该编写处于未定义行为边界的代码。 -
我怀疑你在设置
int *y = NULL;后得到了那个输出。