Tas*_*man 9 c++ structure function
我正在练习不同的方法来为结构变量赋值.但是,当我尝试这个时,我得到了一些垃圾价值.这是代码.
#include<iostream>
using namespace std ;
struct Distance{
int feet ;
int inches;
};
void get_val(Distance );
void disp(Distance);
int main(){
Distance l, m ; //Objects
get_val(l);
get_val(m);
disp(l);
disp(m);
return 0 ;
}
void get_val(Distance length){
cout<<"\nEnter Length "
<<"\nFeet : ";
cin>>length.feet;
cout<<"\nInches : ";
cin>>length.inches;
}
void disp(Distance length){
cout<<"\nLength : \n"
<<"Feet : "<<length.feet
<<"\nInches : "<<length.inches ;
}
Run Code Online (Sandbox Code Playgroud)
为什么我将垃圾值作为输出?
小智 9
通过引用传递它们.
void get_val(Distance&);
void get_val(Distance &length){}
Run Code Online (Sandbox Code Playgroud)
您在另一个函数中更改main函数中创建的结构的值,因此您必须通过引用或使用指针传递它们.
感谢Benjamin Lindley.
到目前为止的评论告诉你该怎么做,但似乎没有找到你需要这样做的原因.
在C++(以及C)中,当您将数据传递给函数时,它会复制该函数的本地数据 - 它不是原始数据!更不用说它占用了内存并为执行时间增加了一点时间(尽管在你进入更大的结构之前无关紧要).
因此,解决方案是传递数据的内存位置 - 对它的引用.引用被"复制",因为它只占用位置(可能是一个size_t或某个可能代表内存中位置的东西)并复制它,但使用该位置来"引用"实际数据.它消除了复制过程中的一些开销,并允许您修改原始数据.
在C中,您将使用指针而不是引用,在C++中,使用引用通常是有利的(因为它意味着您传递的内容已经初始化而不会进行段错误).您可能已经看过语法并且已经使用过它,但我在这里复制它是为了冗余:
void get_val(Distance&);
void disp(const Distance&);
//...
void get_val(Distance& length){
cout<<"\nEnter Length "
<<"\nFeet : ";
cin>>length.feet;
cout<<"\nInches : ";
cin>>length.inches;
}
void disp(const Distance& length){
cout<<"\nLength : \n"
<<"Feet : "<<length.feet
<<"\nInches : "<<length.inches ;
}
Run Code Online (Sandbox Code Playgroud)
您可以像常规变量一样使用引用(作为提示,变量本身就是一种引用!您以相同的方式调用函数 - get_val(l);和disp(l);.)const引用只是一个您无法更改的引用.通常,您将它们用于只读取值而不执行任何其他操作的函数.
您需要通过引用传递Distance给get_val.然后签名get_val需要
void get_val(Distance& length);
Run Code Online (Sandbox Code Playgroud)
有了实现,有两个问题:
Distance在get_val.l或m.使用传递引用(使用const)即
void get_val(Distance &length)
void disp(const Distance &length){
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2232 次 |
| 最近记录: |