为什么我不能给C++中的整数指针赋值?

为什么我不能给C++中的整数指针赋值?,c++,pointers,c++11,clang++,C++,Pointers,C++11,Clang++,我的代码是 int null = 0; int *p = null; 它给了我一个错误:无法用“int”类型的左值初始化“int*”类型的变量 在C语言中,它会起作用 编辑: 我如何才能让它在这种精神下工作 这是从练习2.32的入门书C++书中得出的: 以下代码是否合法?如果不是,你会怎么做 让它合法化 您应该在C++11中使用nullptr。C++不在int和x*之间进行自动转换,因为x是类型,所以使用int类型变量定义null无效。在C++11之前的版本中,可以使用整型文字,如0。在新标准

我的代码是

int null = 0;
int *p = null;
它给了我一个错误:无法用“int”类型的左值初始化“int*”类型的变量

在C语言中,它会起作用

编辑:

我如何才能让它在这种精神下工作

这是从练习2.32的入门书C++书中得出的:

以下代码是否合法?如果不是,你会怎么做 让它合法化

您应该在C++11中使用nullptr。C++不在int和x*之间进行自动转换,因为x是类型,所以使用int类型变量定义null无效。在C++11之前的版本中,可以使用整型文字,如0。在新标准之后,您仍然可以使用整型常量,但是使用nullptr over NULL有很好的理由


您可以在此处阅读有关它的更多信息:nullptr:。

change int*p=null;到int*p=int*null

如果您使用的是C++11,则使用nullptr:

如果您不使用C++11,请改用NULL:

不要定义自己的空值,因为C/C++已经有了自己的空值。NULL没有类型,仅定义为0,可以将整数文本0分配给指针:

int *p = 0;

我认为*p不是C的正确标识符。这是因为一个好的标识符不应该以符号开头,而应该以字母开头。

我认为你只是缺少了一个演员阵容。为什么要这样做?他们不是同一类型的。如果你真的想这样做,你需要一个cast。可能是重复的。不是重复的-0是使用的特殊链接问题10如果没有nullptr,我如何才能使上述工作保持原样?我是C++的新手。如果你使用C++ 11,那么使用null pt:int *p= null pTr;如果您没有使用C++11,那么请改用NULL:int*p=NULL;。不要定义自己的空值,C/C++已经有了一个空值。NULL没有类型,它只是定义为0,可以将整数文本0分配给指针:int*p=0;我现在正在学习C++,我读了底漆C++。这是一个练习2.32。你建议的解决方案是先来的。我想知道是否还有其他的东西可以做这项工作,只是为了体验C++的运行。@ GAN1332:任何空指针常量都可以工作,其中包括false和0L。但这是模糊和过时的;使用nullptr。这样更安全。@gon1332如果答案没有回答您提出的问题,您不必选择答案。这个不能解释为什么int*p=0;有效,并且似乎声称NULL不起作用,这是错误的。通过选择它,您可以减少其他人来实际回答您的问题的可能性。我从第一次开始就这样做了,但得到一个警告:从较小的整数类型“int”[-Wint to pointer cast]转换为“int*”,该警告表明您正在编译64位,其中指针是8字节的大小,但int是4字节的大小。我想知道是否还有别的事情可以做这项工作,只是为了体验C++的体验,尤其是从书还没有提到类型化的时候。我和你们在一起,但有什么我错过的吗?@gon1332:你们到底想做什么工作?将int转换为指针?这本书不是要你这么做。它只是问你如何修复代码。修复代码的正确方法是将第二个null更改为nullptr,或者&null,因此p指向int null。如果你想把一个int转换成一个指针,你需要一个cast。是的,你是对的。答案是使用nullptr或文本0进行初始化。*p表示p是一个指针,它不包含在名称标识符中:感谢您的评论,并告诉我一些我以前不知道的事情。
int *p = nullptr;
int *p = NULL;
int *p = 0;