在C中,似乎有零各个值之间的差- NULL,NUL和0.
我知道ASCII字符的'0'计算结果为48或0x30.
该NULL指针通常定义为:
#define NULL 0
Run Code Online (Sandbox Code Playgroud)
要么
#define NULL (void *)0
Run Code Online (Sandbox Code Playgroud)
另外,也有似乎评价的NUL人物.'\0'0
是否有时候这三个值不相等?
这在64位系统上也是如此吗?
我知道在C++中0x或者NULL被nullptr基于指针的应用程序所取代.我只是好奇他们为什么要更换它?
在处理指针时,在什么情况下使用nullptr过度NULL有益?
常量0用作C和C++中的空指针.但随着问题"指向一个特定的固定地址 "似乎有一些可能使用分配固定地址.在任何系统中,对于访问地址0的任何低级任务,是否有任何可能的需求?
如果有,那怎么解决0为空指针而全部?
如果没有,是什么让它确定没有这种需要?
为什么在c或c ++中不支持添加两个指针.
当我做,
int *ptr,*ptr1;
int sum = ptr + ptr1;
Run Code Online (Sandbox Code Playgroud)
C或C++会抛出错误.虽然它支持,
int diff = ptr - ptr1;
Run Code Online (Sandbox Code Playgroud) Richard Reese所著的《理解和使用 C 指针》一书说:
空概念是空指针常量支持的抽象。这个常数可能是也可能不是一个常数零。AC 程序员不需要关心他们实际的内部表示。
我的问题是,由于“这个常数可能是也可能不是常数零”,我在我的代码中执行以下操作是否安全:
int *ptr = NULL;
// Some code which probably sets ptr to a valid memory address
if(!ptr)
{
ERROR();
}
Run Code Online (Sandbox Code Playgroud)
如果 NULL 不为 0,则 if 子句有可能评估为真。