结构体做返回值,相当于类名做返回值。
形式参数是有主调函数传递给被调函数的数据接收变量,空间属于被调函数。
返回值是被调函数传送给主调函数的数据接收变量,是无名的不可见的变量,空间在主调函数中。
用引用做返回值,用对象做接收数据。
将全局区的变量传给EAX,在有EAX指向的地址的数据复制到是s1,s2中,打印的结果是有效的。返回值中的空间是不可见的。
#include <iostream>
using namespace std;
struct SStud
{
int nNumb;
char sName[20];
float fMath;
}g_s1={1008,"张三",89.5f},g_s2={1009,"李四",91.5f},g_s={0};
SStud& GetData1()
{
return g_s1;
}
SStud& GetData2()
{
return g_s2;
}
int main()
{
SStud s1=GetData1();
SStud s2=GetData2();
g_s1=g_s;
g_s2=g_s;
cout<<s1.nNumb<<‘\t‘<<s1.sName<<‘\t‘<<s1.fMath<<endl;
cout<<s2.nNumb<<‘\t‘<<s2.sName<<‘\t‘<<s2.fMath<<endl;
return 0;
}
对象的引用做返回值,对象的引用接收数据。
没有结构体传递数据的问题,将数据传递给EAX,EAX后传递给s1,s2。打印的结果是空。
#include <iostream>
using namespace std;
struct SStud
{
int nNumb;
char sName[20];
float fMath;
}g_s1={1008,"张三",89.5f},g_s2={1009,"李四",91.5f},g_s={0};
SStud& GetData1()
{
return g_s1;
}
SStud& GetData2()
{
return g_s2;
}
int main()
{
SStud& s1=GetData1();
SStud& s2=GetData2();
g_s1=g_s;
g_s2=g_s;
cout<<s1.nNumb<<‘\t‘<<s1.sName<<‘\t‘<<s1.fMath<<endl;
cout<<s2.nNumb<<‘\t‘<<s2.sName<<‘\t‘<<s2.fMath<<endl;
return 0;
}
返回值是对象,接收的类型是对象的引用。
有结构体数据的传递。
发生了2次结构体数据的传递,打印的结果是有效的数据。
#include <iostream>
using namespace std;
struct SStud
{
int nNumb;
char sName[20];
float fMath;
}g_s1={1008,"张三",89.5f},g_s2={1009,"李四",91.5f},g_s={0};
SStud GetData1()
{
return g_s1;
}
SStud GetData2()
{
return g_s2;
}
int main()
{
SStud& s1=GetData1();
SStud& s2=GetData2();
g_s1=g_s;
g_s2=g_s;
cout<<s1.nNumb<<‘\t‘<<s1.sName<<‘\t‘<<s1.fMath<<endl;
cout<<s2.nNumb<<‘\t‘<<s2.sName<<‘\t‘<<s2.fMath<<endl;
return 0;
}
返回值是对象,接收数据是对象,打印的结果是有效的。
#include <iostream>
using namespace std;
struct SStud
{
int nNumb;
char sName[20];
float fMath;
}g_s1={1008,"张三",89.5f},g_s2={1009,"李四",91.5f},g_s={0};
SStud GetData1()
{
return g_s1;
}
SStud GetData2()
{
return g_s2;
}
int main()
{
SStud s1=GetData1();
SStud s2=GetData2();
g_s1=g_s;
g_s2=g_s;
cout<<s1.nNumb<<‘\t‘<<s1.sName<<‘\t‘<<s1.fMath<<endl;
cout<<s2.nNumb<<‘\t‘<<s2.sName<<‘\t‘<<s2.fMath<<endl;
return 0;
}