我是C ++的新手,正在尝试学习指针的概念。有人能告诉我为什么下面的C ++声明是非法的吗?在我看来,这是合法的,但我被告知它是非法的。
int null = 0, *p = null;
答案 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'