我正在测试这段代码,结果是程序在到达<< op第一个时崩溃cout(因为它打印出op =然后停止).
char *lo = 0, *op = 0, *ro = 0;
cout << "op = " << op << endl;
cout << "*op = " << *op << endl;
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:为什么会这样?
我知道,指针给我带来了很多问题..
因为这里:
cout << "*op = " << *op << endl;
// ^^^
// op is a NULL pointer!
Run Code Online (Sandbox Code Playgroud)
您正在取消引用一个不指向任何对象的指针,这是未定义的行为.
因此,虽然指针已初始化,但它不会使用现有对象的地址进行初始化,因此您无法有意义地取消引用它.C++ 11标准的第5.3.1/1段规定:
一元运算
*符执行间接:它所应用的表达式应该是指向对象类型的指针,或指向函数类型的指针,结果是引用表达式指向的对象或函数的左值.
当表达式没有指向任何对象时,标准没有指定结果应该是什么:因此,它是未定义的行为.
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |