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

这是正确的还是应该给出一些错误?

4

6 回答 6

7

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

于 2012-07-13T11:59:08.847 回答
6

两者都不。

这是不正确的,但是 C(或 C++)标准对实现没有要求它应该给出任何错误。

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

于 2012-07-13T11:59:24.173 回答
2

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

但是,考虑到您将值存储在未知的位置(我们不知道p指向哪里),因此结果行为也是未知的(即未定义的行为)。

于 2012-07-13T11:59:02.037 回答
2

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

IE

int *p = new int;
*p = 100;
cout << *p;
delete p;
于 2012-07-13T12:00:41.580 回答
2

这是错误的。

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

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

它必须通过指向一个变量来初始化,比如说 x。

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

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

于 2012-07-13T12:05:21.610 回答
1

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

具有正确选项(例如 gcc's )的良好编译器-Wall将显示警告:

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

于 2012-07-13T11:58:35.427 回答