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

标签 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");

最佳答案

你不能。

未初始化的值可以是任何值。未初始化的指针可以指向任何地方。它甚至可能纯粹出于巧合而指向有效数据。

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

关于c - 在C中,如何区分未初始化的指针和空指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51222685/

相关文章:

c - 需要帮助在我的自定义 CLI 中使用 ncurses 进行命令输出分页

c - 找到一个c程序的输出

java - 将对象传递到数据库时,调试器说属性有变量,但是当打印 result.hasErrors 时,它是 null

azure - 处理Azure数据工厂管道中的空值

android - 在 Android (ARM) 上比较和交换

c - 是什么导致此函数中出现段错误?

java - 使用Optional验证输入法参数

java - 变量为空,尽管它已被设置

c - 重新分配后如何将新内存清零

c - 当 parent 收到杀死子进程的信号时,如何向收割者函数中加入额外的参数 (c)?