c++ - 指向数组第 [-1] 个索引的指针

标签 c++ c arrays pointers

指向数组第 [-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/

相关文章:

c - 当 GDB 崩溃/出现段错误时如何编辑正在运行的程序

java - 在 Java 中从 HTTP 响应解析 JSON 数组

arrays - Angular : how can i filter nested object properties?

c++ - typeid指针和引用比较区别?

c++ - 在 Windows 上以编程方式关闭弹出菜单

c++ - 我无法弄清楚 "undefined reference to Winmain@16 error"

c++ - xerces-c++ 编译/链接问题

c - kmap_atomic() 的参数(KM_USER1)

c - 如果 C 中的 int 变量为 9,如何打印 09?

javascript - 如何检查数组中的id是否出现在另一个数组中,然后将其推送到新数组