指向数组第 [-1] 个索引的指针如何每次都产生合法输出。指针赋值中实际发生了什么?
#include<stdio.h>
int main()
{
int realarray[10];
int *array = &realarray[-1];
printf("%p\n", (void *)array);
return 0;
}
代码输出:
manav@workstation:~/knr$ gcc -Wall -pedantic ptr.c
manav@workstation:~/knr$ ./a.out
0xbf841140
编辑: 如果这种情况有效,那么我可以使用它来定义一个索引从 1 而不是 0 开始的数组,即:array[1]、array[2]、.. .
最佳答案
您只是得到一个指针,其中包含该“虚构”位置的地址,即第一个元素 &realarray[0]
的位置减去一个元素的大小。
这是 undefined behavior ,并且可能会严重崩溃,例如,如果您的机器具有分段内存架构。它之所以有效,是因为编译器作者选择了实现上述算法;这可能随时改变,另一个编译器的行为可能完全不同。
关于c++ - 指向数组第 [-1] 个索引的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2361927/