当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么语句intnull=0,*p=null是非法的?》经验,为你挑选了2个好方法。

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

int null = 0, *p = null;

小智.. 6

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

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

基本上发生的是你正在尝试用变量初始化一个指针.C++中唯一允许的是将指针直接指定给零.

int * p = 0;

像上面这样的例子就可以了.



1> 小智..:

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

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

基本上发生的是你正在尝试用变量初始化一个指针.C++中唯一允许的是将指针直接指定给零.

int * p = 0;

像上面这样的例子就可以了.



2> Mats Peterss..:

C++标准允许将指针赋值0为常量.

但是,代码:

int null = 0;
int *p = null; 

如果没有设置p为常量0,则将其设置为值null,即整数变量.

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

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

请注意,即使你做了const int null = 0;,它仍然不是常量0- 它是一个相同值的常量0,但不是相同的,词法上,如0.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有