选项A:
if (NULL == pSomethingColumn) // Yes, we use Yoda conditions
if (NULL != pSomethingColumn)
或
if (pSomethingColumn)
if (!pSomethingColumn)
我也在寻找解释推理的参考资料。
我听过一些人说,从技术上讲,NULL不一定要定义为0,但得了吧!如果是这种情况,那么这个笨蛋(我们的应用程序)将以不同的方式在-2147483648中崩溃。
所以,如果是NULL != 0,那我们就有大问题了。
请帮我解决一个无意义的语法争论。我并不是特别喜欢这两种方式;我只是在寻
我开始学习C++。我遇到了一个关于指针的小困惑,特别是一个空指针。根据我的理解,当您声明一个指针并将它设置为指向一个值时,您可以执行以下操作:
int var = 10;
int *ptr;
ptr = &var;
*ptr = 20;
这将将var的值更改为20。但是,当设置NULL指针时,您将执行以下操作:
int *ptr = NULL;
这不意味着您要将值NULL赋值给ptr所指向的变量,而不是地址,因为有*运算符?我认为空指针的值(它的地址)为0,因此从我所读到的内容来看,它没有指向任何位置。这样做更有意义吗?
int *ptr;
ptr =
理查德·里斯( Richard )著的“理解和使用C指针”一书说:
空概念是空指针常量支持的抽象。这个常数可能是,也可能不是常数零。C程序员不需要关心他们的实际内部表示。
我的问题是,既然“这个常数可能是或可能不是常数零”,那么在我的代码中这样做对我来说安全吗?
int *ptr = NULL;
// Some code which probably sets ptr to a valid memory address
if(!ptr)
{
ERROR();
}
如果NULL不是0,则If子句有可能计算为true。
我最近看到一篇文章提到,C/C++中的空指针实际上不是简单的零,而是被编译器解释为平台的任何分配地址都是空的。
这与我在Visual Studio中调试c++时看到的情况一致,当指针是坏指针时,指针的值是0xCACACACA (或类似的值)(但这可能只是一个显示的值)。
长话短说,平台(比如windows)真正的空指针地址是什么?还是我完全误解了答案?
编辑:
另外,(只是作为扩展)这是什么造成的?
int i = 0;
// pretend to do some stuff with i
char* = (char*)i;
编译器会在运行时将指针设置为null还是将其设置为零?如果是后