int *p;
*p=100;
cout<<*p;
这是正确的还是会出错?
答案 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'在此函数中未初始化使用