【发布时间】:2017-12-05 11:29:17
【问题描述】:
这个简单的代码块的行为出人意料。
#include <iostream>
using namespace std;
class Node
{
public:
char* data;
Node(char d)
{
data = &d;
}
};
int main()
{
Node NodeA = Node('c');
cout<<*(NodeA.data)<<endl;
return 0;
}
我希望得到“c”作为输出,但它却输出了“}”。 我有一种感觉,它必须与将“数据”指针分配给匿名变量“c”有关。
我发现这个question 讨论了一个类似的问题。
但是正如在上面的答案中提到的那样,只有在表达式末尾没有引用它的指针限制匿名变量时,它才会被杀死。我认为这里不是这种情况,因为我将指针(“数据”)绑定到它,但不知何故它仍然被杀死。
我想知道导致意外输出的原因。
【问题讨论】:
-
您没有将指针指向匿名
'c',而是将指针指向参数d。'c'被 按值 传递给您的Node(char d)。 -
你称它为匿名的——但有趣的是
d——我称之为本地。当局部变量超出范围时,您认为指针会发生什么?