结构体和结构体指针作为参数传递

参考链接: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;
}

猜你喜欢

转载自blog.csdn.net/Li_haiyu/article/details/81665628
今日推荐