22得票3回答
在空指针上进行算术运算是否属于未定义行为?

我认为以下程序计算了一个无效的指针,因为NULL只适用于赋值和比较相等性:#include <stdlib.h> #include <stdio.h> int main() { char *c = NULL; c--; printf("c: %p\n"...

41得票8回答
代码中的未初始化指针

我正在学习C++,我了解到如果指针未初始化,则可能会指向内存中的随机位置,并创建一些问题,这些内存可能被其他程序使用。 现在如果是这种情况,我们就不应该在代码的任何部分中出现以下行:int* ptr; 相反,我们应该有类似于int* ptr = NULL; //Is this going t...

29得票3回答
将空的void*指针删除,是否属于未定义行为?

我知道delete一个空指针是无操作的: 在任何一种情况下,如果delete的操作数的值是空指针,则该操作没有效果。 (C++标准5.3.5 [expr.delete] p2) 同时,删除void*指针是未定义行为,因为析构函数不能被调用,因为没有void类型的对象: 在第一种情...

47得票9回答
什么是空指针和空类型指针?

我正在浏览一些面试题,其中有一个关于空指针和空类型指针的问题 (点击这里查看),它声称: 没有返回类型的指针称为空指针。它可以是任何类型的数据。 这让我感到非常困惑!根据这个问题,似乎可以随意使用 void 和 null ,但我不认为这是正确的。 我认为 void 是一种返回类型,...

7得票3回答
可以假设NULL常量就是零吗?

《理解和使用C指针》一书中,Richard Reese提到: “null”是一个抽象的概念,由空指针常量所支持。这个常量可以是零或非零值。C程序员不需要关心它们的内部表示。 我的问题是,既然“这个常量可以是零或非零值”,那么在我的代码中做以下操作是否安全? int *ptr = NULL...

8得票6回答
空指针测试性能

在C#中测试引用类型变量是否为空指针的性能如何,与测试整数是否小于零或bool型是否为false相比呢?在这种“null-pointer”的测试方面是否存在其他已知问题,例如是否会产生垃圾? 我每一帧游戏都要进行数百次这样的测试,我想知道这些测试是否会导致问题,或者是否可以更有效地实现?

18得票6回答
每个空指针常量都是一个空指针吗?

来自C17草案(6.3.2.3 ¶3): 值为0的整数常量表达式,或将这样的表达式强制转换为类型void *,被称为空指针常量67)。如果将空指针常量转换为指针类型,则所得到的指针,称为空指针,保证与任何对象或函数的指针比较时都不相等。 67)宏NULL在<stddef.h>(...

130得票2回答
当通过空指针调用成员函数时,会导致未定义行为的情况是什么时候发生?

考虑以下代码:#include <iostream> struct foo { // (a): void bar() { std::cout << "gman was here" << std::endl; } // (b): ...

69得票9回答
为什么在C语言中有两种表示NULL的方式?

根据C11标准的§6.3.2.3 ¶3,C语言中的空指针常量可以由实现定义为整数常量表达式0或将这样的表达式强制转换为void *。在C中,空指针常量由NULL宏定义。 我的实现(GCC 9.4.0)以以下方式在stddef.h中定义NULL: #define NULL ((void *)...

11得票3回答
在C语言中,NULL和0完全等价吗?

在C89/C99+中,使用NULL而非0有“硬”原因吗?是否可以毫无顾虑地在使用C语言的非常难以理解的代码中互换它们,而不考虑与标准合规性相关的深刻问题? 我关心的是像标准合规性、可移植性、未定义行为、与语言的意外角落产生意想不到的不同交互等“硬”问题,还有那些(假设的)亿级巨脑分段内存超级...