参考链接:https://blog.csdn.net/jin13277480598/article/details/48226349
结构体和结构体指针作为参数传递其实也是比较好理解的,因为之前我们应该学习过地址传参数的问题,其实是一样的,主要优点是地址比传递整个结构体快,具体可参考链接
结构体作为参数传递:
#include<iostream>
#include<cstring>
using namespace std;
//声明结构体
struct namect{
char fname[20];
char lname[20];
int letters;
};
//函数声明必须提供数据类型,但是可以不传参数
struct namect getinfo(void);
//声明函数的返回值是一个结构体,参数类型也是结构体,这里结构体作为参数值直接传进来
struct namect makeinfo(struct namect);
void showinfo(struct namect);
int main()
{
//定义结构体变量person1
struct namect person1;
person1 = getinfo();
person1 = makeinfo(person1);
showinfo(person1);
return 0;
}
struct namect getinfo(void)
{
struct namect tmp;
cout<<"Please enter your firename:\n";
cin>>tmp.fname;
cout<<"Please enter your lname:\n";
cin>>tmp.lname;
return tmp;
}
struct namect makeinfo(struct namect info)
{
info.letters=strlen(info.fname)+strlen(info.lname);
return info;
}
void showinfo(struct namect info)
{
cout<<info.fname<<" "<<info.lname<<endl;
cout<<info.letters<<endl;
}
结构体地址传递:
#include <iostream>
#include <cstring>
using namespace std;
typedef struct namect * pnamect;
//声明结构体
struct namect{
char fname[20];
char lname[20];
int letters;
};
struct namect getinfo(void);
//表明传入的是一个指向结构体的指针变量,只需要将结构体的地址传进来即可
void makeinfo(pnamect);
void showinfo(pnamect);
int main()
{
//定义结构体变量person1s
struct namect person1;
//struct namect *p = &person1
pnamect p=&person1;
person1 = getinfo();
//传递的时候只需要传入结构体的地址即可
makeinfo(p);
showinfo(p);
return 0;
}
struct namect getinfo(void)
{
struct namect tmp;
cout<<"Please enter your firename:\n";
cin>>tmp.fname;
cout<<"Please enter your lname:\n";
cin>>tmp.lname;
return tmp;
}
//以指针变量传入结构体的地址就可以对结构体进行实际操作,并且传地址比整个结构体传进来快!
void makeinfo(pnamect pst)
{
pst->letters=strlen(pst->fname)+strlen(pst->lname);
}
void showinfo(pnamect pst)
{
// cout<<p->fname<<" "<<p->lname<<endl;
cout<<"Your name contains "<<pst->letters<<" letters."<<endl;
}