请帮我解决这个意外的输出
Please help me get through this unexpected output
这是我的链表示例c++代码。这实际上不是一个链表,而只是一个虚拟程序。我得到了这个程序的意外输出。
#include<iostream>
using namespace std;
struct list{
int data;
list *next;
};
void setData(list ob){
int d;
cout<<"enter data"<<endl;
cin>>d;
ob.data=d;
}
void getData(list ob){
cout<<"Data is :"<<ob.data<<endl;
}
int main(){
list node1,node2,node3;
setData(node1);
setData(node2);
setData(node2);
getData(node1);
getData(node2);
getData(node3);
return 0;
}
我输入的代码是2、3和4。我得到的意外输出是-
enter data
2
enter data
3
enter data
4
Data is :2293540
Data is :4201920
Data is :2293608
编辑
struct list{
char data; list next;
}
void main(){
list *start,node1,node2;
//I got stuck on the below two lines
start=(struct list)malloc(sizeof(list)); //Dynamic allocation of memory of size list whose address is stored in start
start=&node1; // start holds the address of node1 which is not dynamically allocated .
我不明白为什么是*开始给出一个动态地址,如果第二个语句通过给它node1的内存地址在堆栈中覆盖它(最近我所理解的)。
因为你是按值传递链表。要更改此设置,通过引用传递。
void setData(list& ob){
int d;
cout<<"enter data"<<endl;
cin>>d;
ob.data=d;
当你按值传递时,c++会对你传递进来的任何东西做一个拷贝。所以当你调用getData
时,你传递了一个没有数据的列表的副本,所以垃圾被打印出来了。
您需要通过引用传入您的list
void setData(list& ob){
int d;
cout<<"enter data"<<endl;
cin>>d;
ob.data=d;
}
您目前通过值传递ob
,因此,尽管您确实正确设置了data
属性,但您正在对函数本地复制 ob
,而不是您传递到函数中的原始list
。
相关文章:
- 字符串比较中的意外输出
- 来自 decltype 的意外输出类型
- 字符数组到十六进制字符串的转换 - 意外输出
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 使用后序遍历递归的深度优先搜索会产生意外输出
- C++的意外输出
- 贝金纳C++练习解决方案的意外输出
- 无效* 转换获得意外输出
- 以下程序的意外输出
- 意外输出:矢量矢量(功率集)
- 基本 int 数组提供意外输出
- 线程的意外输出
- 减法中的意外输出
- 带有左移操作员C 的意外输出
- C strncpy意外输出
- 意外输出..函数绑定在虚拟表中的发生方式
- 星号的意外输出
- 已编译的 protobuf 文件的意外输出路径
- 打印对象矢量的意外输出
- 递归函数用于计算 n 个数字之和的意外输出