相关疑难解决方法(0)

NULL,'\ 0'和0之间有什么区别

在C中,似乎有零各个值之间的差- NULL,NUL0.

我知道ASCII字符的'0'计算结果为480x30.

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 null pointers

287
推荐指数
6
解决办法
28万
查看次数

为什么不调用nullptr NULL?

在C++ 11中,nullptr关键字被添加为更安全的类型指针常量,因为先前的通用定义NULL为0有一些问题.

为什么标准委员会选择不调用新的空指针NULL,或者声明NULL应该是#defined nullptr

c++ language-design c++11

67
推荐指数
4
解决办法
5343
查看次数

“来自整数的指针/来自没有强制转换的指针的整数”问题

这个问题旨在成为整数和指针问题之间所有初始化/分配的常见问题解答条目。


我想编写代码,将指针设置为特定的内存地址,例如0x12345678. 但是当用 gcc 编译器编译这段代码时,我得到“初始化使指针从整数而不进行强制转换”警告/错误:

int* p = 0x12345678;
Run Code Online (Sandbox Code Playgroud)

类似地,这段代码给出了“初始化从指针生成整数而不进行强制转换”:

int* p = ...;
int i =  p;
Run Code Online (Sandbox Code Playgroud)

如果我在变量声明行之外做同样的事情,消息是一样的,但说的是“赋值”而不是“初始化”:

p = 0x12345678; // "assignment makes pointer from integer without a cast"
i = p;          // "assignment makes integer from pointer without a cast"
Run Code Online (Sandbox Code Playgroud)

使用其他流行编译器的测试也会给出错误/警告消息:

  • clang 说“不兼容的整数到指针转换”
  • icc 说“类型的值int不能用于初始化类型的实体int*
  • MSVC (cl) 说“初始化int*在间接级别上与int”不同。

问题:上面的例子是有效的 C 吗?


还有一个后续问题:

这不会给出任何警告/错误:

int* p = 0;
Run Code Online (Sandbox Code Playgroud)

为什么不?

c pointers casting initialization assignment-operator

12
推荐指数
1
解决办法
2000
查看次数

当C预处理器宏定义两次时会发生什么?

我按如下方式定义了两次宏:

#define a 2  
#define a 3   
Run Code Online (Sandbox Code Playgroud)

我认为a代码中的任何出现都会被替换为2,并且当#define a 3遇到时,代码中没有更多的as可供替换3,因此2优先.

但是当我执行时它a被3替换,为什么?

c macros c-preprocessor

3
推荐指数
3
解决办法
3454
查看次数