16 - 10 - 24 结构体-传递并返回结构(笔记)--《c primer plus 》

struct person {…….}worker ;
为了传递 结构作为参数,函数的参数必须是变量名(ex. worker),而不是&worker,那么相应的形式参数应该声明为 struct person ,而不是指向该类型的指针。
可以通过返回一个结构,把结构的信息返回给main(),

#include<stdio.h>
#include<string.h>
#define NLEN 30
struct namect{
    char fname[NLEN];          //名 
    char lname[NLEN];          //姓 
    int letters;               //字母数 
};
struct namect getinfo(void);              //声明  namect 类型的函数 
struct namect makeinfo(struct namect);    //结构体作参数 
void showinfo(struct namect);
char *s_gets(char *st,int n);

int main(){
    struct namect person;     //namect 一个 person 变量
    person = getinfo();
    person = makeinfo(person);
    showinfo(person);
    return 0; 
}
struct namect getinfo(void)
{                             //返回了temp, 为什么这里是一个void 
    struct namect temp;
    printf("enter first name");
    s_gets(temp.fname,NLEN);
    puts("enter last name");
    s_gets(temp.lname,NLEN);
    return temp;
}
struct namect makeinfo(struct namect info)
//函数被声明为struct namect 型,故函数要返回一个“结构”创建新的info,储存在person 中的值被copy 到info中,函数处理的是这个副本,so 统计完字母个数后,计算结果储存在info而不是person中。然而返回机制弥补了这一点,return info 与 main中的  person = makeinfo(person)相结合,把储存在info中的值再copy到person中。                                       
{
    info.letters = strlen(info.fname) + strlen(info.lname);
    return info;
}
void showinfo(struct namect info)
{
    printf("%s %s ,your name contains %d letters .\n" ,info.fname,info.lname,info.letters); 
}
char *s_gets(char *st,int n)
{
    char *ret_val;
    char *find;

    ret_val = fgets(st,n,stdin); 
    if(ret_val)
    { 
        find = strchr(st,'\n');
        if(find)
          *find = '\0';
        else{
         while(getchar()!='\n')
           continue;
        }
    }

以上,才疏学浅,如有错误,万望指正,感激不尽

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值