int *p;
*p=100;
cout<<*p;
这是正确的还是应该给出一些错误?
这将调用未定义的行为;您正在取消引用未初始化的指针。但是,您的代码可能会“工作”,因为这是未定义行为的一种可能结果。
两者都不。
这是不正确的,但是 C(或 C++)标准对实现没有要求它应该给出任何错误。
C(或 C++)中的某些东西是“未定义的行为”,这意味着标准不关心会发生什么。这是其中之一。实现可能会做出一些努力来告诉您有问题,但这不是必需的。您(作为程序员)有责任避免未定义的行为。
语法上看起来不错,但当然你可以通过简单地运行它来找出发生了什么。
但是,考虑到您将值存储在未知的位置(我们不知道p
指向哪里),因此结果行为也是未知的(即未定义的行为)。
您需要为整数分配一些空间。
IE
int *p = new int;
*p = 100;
cout << *p;
delete p;
这是错误的。
指针保存的主要值是它指向的内存位置的地址。
语句 int *p 将 p 定义为指针。
它必须通过指向一个变量来初始化,比如说 x。
初始化后,打印 p 将为您提供 x 的内存地址,打印 *p 将为您提供 x 所持有的值。
它可能会执行某些功能,但绝对不会满足您的目的。
这会写入未初始化变量p
指向的任何位置,因此由于未定义的行为,它可能会或可能不会起作用(如果它不认为它可以 - 它不是!)。它很可能会使您的程序崩溃。
具有正确选项(例如 gcc's )的良好编译器-Wall
将显示警告:
警告:“p”在此函数中未初始化使用