我是 cpp 初学者,无法理解为什么在下面的代码中,printf()... 函数似乎更改 一些变量。代码或我的编译器安装有问题吗?
#include <iostream>
#include<stdio.h>
class Node
{
public:
int val;
Node * next;
Node(int v) { // constructor
val=v;
next=NULL;
}
};
class Stack
{
public:
Node *head;
Stack(int i) // constructor
{
Node n(i);
head=&n;
}
};
int main()
{
Stack s(1);
printf("s.head->next: %p\n",s.head->next);
printf("s.head->next: %p\n",s.head->next);
}
我得到以下输出:
s.head->next: 00000000
s.head->next: FFFFFFFE
我怎么可能不一样呢? (我在使用 std:cout 函数时遇到了类似的问题,但最小代码会更长)。 感谢您的反馈。
最佳答案
这个:
Node n(i);
创建一个局部变量,然后存储地址:
head=&n;
稍后使用该地址。
在那之后,所有赌注都取消了,因为您处于未定义行为领域。
关于c++ - printf() 似乎改变了一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44608839/