2014-04-24 67 views
-2

我的代码是为什么我不能在C++中给整数指针赋一个整数值?

int null = 0; 
int *p = null; 

它给了我一个错误:无法初始化类型的变量“诠释*”类型“诠释”的左值。

在C它会工作。

编辑:

我怎样才能使它在这种精神的工作?

这是从入门C++的书的练习(2.32):

是下面的代码合法与否?如果没有,你怎么可能 使它合法?

int null = 0, *p = null; 
+1

,我认为你只是缺少强制。 –

+1

为什么要这样?它们不是同一类型。如果你真的想这样做,你需要一个演员阵容。 – Rup

+0

[将int转换为指针](https://stackoverflow.com/questions/9212219/converting-int-to-pointer)可能重复。 – acomar

回答

1

如果您正在使用C++ 11然后使用nullptr:如果你不使用C++ 11

int *p = nullptr; 

然后使用NULL代替:

int *p = NULL; 

因为C/C++已经有了它自己的一个,所以不要定义你自己的null值。 NULL没有类型,它被简单地定义为0,和文字0整数可以分配到一个指针:

int *p = 0; 
1

你应该在C++ 11使用nullptr。 C++不会自动转换int和x *(其中x是type),因此使用int类型变量来定义null将不起作用。在C++ 11之前,您可以使用积分文字,如0。 (您仍然可以使用积分常数的新标准后,但也有很好的理由使用nullptr超过NULLWhat are the advantages of using nullptr?

你可以阅读更多关于它nullptr这里:http://en.cppreference.com/w/cpp/language/nullptr

+0

我怎样才能使上述工作,因为它没有nullptr?我是C++新手。 – gon1332

+2

如果您使用C++ 11,则使用'nullptr':'int * p = nullptr;'。如果你没有使用C++ 11,那么使用'NULL'代替:'int * p = NULL;'。不要定义你自己的'null'值,C/C++已经有一个。 'NULL'没有类型,它被简单地定义为'0',并且一个整型立即数'0'可以被分配给一个指针:'int * p = 0;' –

+0

我现在正在学习C++,并且我读了Primer C++。这是一个excersise(2.32)。您提出的解决方案是首先出现的解决方案。我想知道是否会有其他能够完成这项工作的东西,仅仅是为了玩C++的经验。 – gon1332

1

变化int *p = null;int *p = (int*)null;

+0

我已经做到了这一点,从第一次,但一收到一个警告:从较小的整数类型“诠释”投地“诠释*” [-Wint到指针铸造] – gon1332

+0

应该有这样做更明确的方式。 – gon1332

+0

这一警告表明要编译为64位,其中一个指针是在大小为8个字节,但一个'int'的大小4个字节。 –

相关问题