为什么语句int null = 0,* p = null是非法的?

时间:2016-01-02 01:17:59

标签: c++ pointers c++11 nullptr

我是C ++的新手,正在尝试学习指针的概念。有人能告诉我为什么下面的C ++声明是非法的吗?在我看来,这是合法的,但我被告知它是非法的。

int null = 0, *p = null;

3 个答案:

答案 0 :(得分:6)

如果您尝试编译此代码,则应该收到以下错误:

error: cannot initialize a variable of type 'int *' with an lvalue of type 'int'

基本上发生的事情是你试图用变量初始化一个指针。 C ++中唯一允许的是将指针直接指定给零。

int * p = 0;

上面的例子就可以了。

答案 1 :(得分:5)

C ++标准允许将指针赋值为console.log(foo()); 作为常量。

然而,代码:

0

未将int null = 0; int *p = null; 设置为常量p,它将其设置为0的值,这是一个整数变量。

如果我们稍微概括一下,将null放在一行上,将int null = 0;放在一个完全不同的行中,其间有一些代码。没有什么可以说中间的代码没有int *p = null; - 但是,我不认为这是不允许这样做的主要原因,而是编写编译器更容易检查"这是整数常量0"比"是这个名为常数的零值"。如果常量来自另一个编译单元(链接时间常量)怎么办?

此外,阅读null = 4;要比拥有46种不同的编码标准容易得多,每种编码标准都使用0的不同名称。

请注意,即使您制作null,它仍然不是常量const int null = 0; - 它是与0相同值的常量,但不是相同的,词法上,0

答案 2 :(得分:0)

要定义一个指针,您需要使用与号(&)作为要传递的对象的前缀。

int null = 0, *p = &null;

这将解决error: cannot initialize a variable of type 'int *' with an value of type 'int'