我的代码是
int null = 0;
int *p = null;
它给出了一个错误:无法使用类型为'int'的左值初始化'int *'类型的变量。
在C中它会起作用。
修改
我怎样才能让这种精神发挥作用呢?
这是来自Primer C ++书籍的练习(2.32):
以下代码是否合法?如果没有,你怎么样? 让它合法吗?
int null = 0, *p = null;
答案 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?)
您可以在此处详细了解nullptr
:http://en.cppreference.com/w/cpp/language/nullptr。
答案 3 :(得分:-2)
我认为* p不是C的正确标识符。这是因为一个好的标识符不应该以符号开头,而应该是一个字母。