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;
}
}
以上,才疏学浅,如有错误,万望指正,感激不尽