C++中的值初始化问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 14:52:56
C++ Primer这本书中讲到的值初始化如下:
int *pi = new int; //pi points to an uninitialized int
int *pi = new int();//pi points to an int value-initialized to 0

但是在我的机子上输出这2种pi,值都是没有初始化的,并没有因为加了一个括号而使得pi值初始化为0,请问这是怎么回事啊。。
liujq007 的程序我运行了一下。pi[0]的值为-842150451。。仍然不是0值啊。是编译器的问题么?
#include<iostream>
using namespace std;
int main()
{
int *pi1 = new int();
int *pi2 = new int;
cout<<*pi1<<endl;
cout<<*pi2<<endl;
delete pi1, pi2;
pi1=pi2=0;
return 0;
}
输出结果都是:-842150451
如果输出的是pi1=003807A8, pi2=003807E0

的确如此,在vc6.0里面并没有进行初始化,但是在vs2005和vs2008都做了初始化。不知道是不是该怪vc6.0,反正就是编译器不同导致的了,不是你的问题~~不用再困惑了,如果还是困惑就装vs2005尝试一下吧!

#include<iostream>
using namespace std;
int main()
{
int *pi = new int();//
cout<<*pi<<endl;//我输出仍然是0啊
return 0;
}

#include<iostream>
using namespace std;
int main()
{
int *pi1 = new int();
int *pi2 = new int;
cout<<*pi1<<endl;
cout<<*pi2<<endl;
delete pi1, pi2;
pi1=pi2=0;
return 0;
}
你这段程序我在我的机器上运行,pi1输出是0,如果你的不是,那也可能是编译器的差异,我用的是VS2008的,你的是VC++6.0吗
你试试cout<<pi1[0]<<endl;行不行,如果是VC++6.0应该可以

应该是该指针所指向的存储空间的问题吧
int *pi = new int();
初始化的是指针pi而*pi的值却没有初始化...

不知道你用什么编译器,我用GCC就可以。在LINUX下都初始化了。

pi在这里是一个指针,不是pi的初值为零,而是所指空间的值为零