为什么我不能在C ++中为整数指针赋一个整数值?

时间:2014-04-24 23:39:20

标签: c++ pointers c++11 clang++

我的代码是

int null = 0;
int *p = null;

它给出了一个错误:无法使用类型为'int'的左值初始化'int *'类型的变量。

在C中它会起作用。

修改

我怎样才能让这种精神发挥作用呢?

这是来自Primer C ++书籍的练习(2.32):

以下代码是否合法?如果没有,你怎么样? 让它合法吗?

int null = 0, *p = null;

4 个答案:

答案 0 :(得分:1)

int *p = null;更改为int *p = (int*)null;

答案 1 :(得分:1)

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

int *p = nullptr;

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

int *p = NULL;

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

int *p = 0;

答案 2 :(得分:0)

您应该在C ++ 11中使用nullptr。 C ++不会在int和x *(其中x是类型)之间进行自动转换,因此使用int类型变量来定义null将不起作用。在pre-C ++ 11中,您可以使用整数文字,例如0。 (您仍然可以在新标准之后使用积分常数,但使用nullptr而不是NULL有充分的理由。What are the advantages of using nullptr?

您可以在此处详细了解nullptrhttp://en.cppreference.com/w/cpp/language/nullptr

答案 3 :(得分:-2)

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