在C语言中,如何区分未初始化的指针和空指针?

时间:2018-07-07 11:22:33

标签: c null

正如我从this related question的答案中了解到的那样,未初始化的指针可以包含几乎所有内容,因此也可能等于NULL。有没有办法将未初始化的指针与空指针区分开来,例如通过给它们一个特定的值?

例如,考虑:

// could potentially print
FILE *f1;
if (f1 == NULL)
    fprintf(stderr, "f1 is NULL");

// will never print, but is this a good/safe way?
FILE *f2 = -1;
if (f2 == NULL)
    fprintf(stderr, "f2 is NULL");

1 个答案:

答案 0 :(得分:2)

你不能。

未初始化的值可以是任何值。未初始化的指针可以指向任何地方。它甚至可以通过巧合指向有效数据。

初始化指向NULL或真实值的指针;如果您发现自己看到未初始化的值,那么某个地方的程序员做错了什么。