没有初始化的指针指向何处?

时间:2018-12-01 18:33:18

标签: c pointers

#include <stdio.h>

int main()
{
    int *b;
    int *a;
    a[1] = 99;
    printf("%p", a);
    return 0;
}

为什么此代码因segfault而失败: 以退出代码11完成的过程

#include <stdio.h>
int main()
{
    //int *b;
    int *a;
    a[1] = 99;
    printf("%p", a);
    return 0;
}

此代码打印并显示指针地址? 0x7fff58162a40 如果我还没有初始化指针a,a [1] = 99的工作方式是什么? 如果这很重要,请在Mac OS Sierra上使用gcc进行编译。

1 个答案:

答案 0 :(得分:5)

访问未初始化的变量和/或写入未请求内存的对象/数组是未定义的行为。 “未定义”意味着一切都会发生,即使该程序似乎按照您的意图“工作”。

实际上,这两个程序都可以;如果其中一个“有效”,那是某种运气(好或坏,您可能会决定)。