我可以将值初始化为指针吗?

时间:2012-07-13 11:57:20

标签: c++

int *p;
*p=100;
cout<<*p;

这是正确的还是会出错?

6 个答案:

答案 0 :(得分:7)

这将调用未定义的行为;你正在取消引用一个未初始化的指针。但是,您的代码可能“有效”,因为这是未定义行为的一种可能结果。

答案 1 :(得分:6)

都不是。

这是不正确的,但C(或C ++)标准对实现不要求任何错误。

C(或C ++)中的某些内容是“未定义的行为”,这意味着标准并不关心会发生什么。这是其中之一。实现可能会做出一些努力告诉您出现了问题,但并不是必须这样做。您(作为程序员)有责任避免未定义的行为。

答案 2 :(得分:2)

语法上看起来不错,但当然你可以通过简单地运行它来找出会发生什么。

但是,请考虑您将值存储在未知的位置(我们不知道p指向的位置)因此导致的行为未知(即 未定义的行为< / em> )。

答案 3 :(得分:2)

您需要为整数分配一些空间。

int *p = new int;
*p = 100;
cout << *p;
delete p;

答案 4 :(得分:2)

这是错误的。

指针保存的主要值是它指向的内存位置的地址。

语句int * p,将p定义为指针。

必须通过指向变量进行初始化,比方说x。

初始化后,打印p将为您提供x的内存地址,打印* p将为您提供x所持有的值。

它可能会执行某些功能,但绝对不会达到您的目的。

答案 5 :(得分:1)

这会写入未初始化的变量p所指向的任何位置,因此可能会或可能不会起作用(如果它确实认为没关系 - 它不是!)由于未定义的行为。最有可能它会使你的程序崩溃。

使用正确选项的好编译器(例如gcc的-Wall)会显示警告:

  

警告:'p'在此函数中未初始化使用