/*
在现在的C中,结构不仅可以作为参数传递给函数,也可以作为函数返回值返回。
同时,结构指针也允许双向通信,因此可以使用任何一种方式解决编程问题。
例程如下:
*/
/*
结构不仅可以作为参数传递给函数,也可以作为函数返回值返回。
函数内部修改原始数据的副本,所以需要返回新修改后的数据,则返回值是struct namect.
*/
#include <stdio.h>
#include <stdlib.h>
struct namect
{
char fname[20];
char lname[20];
int letters;
};
struct namect getinfo(void)
{
struct namect temp;
printf("please enter your first name.\n");
gets(temp.fname);
printf("please enter your last name.\n");
gets(temp.lname);
return temp;
}
struct namect makeinfo(struct namect info)
{
info.letters = strlen(info.fname)+strlen(info.lname);
return info;
}
void showinfo(struct namect info)
{
printf("name: %s%s, letters: %d\r\n",info.fname, info.lname, info.letters);
}
int main(void)
{
struct namect person;
person = getinfo();
person = makeinfo(person);
showinfo(person);
return 0;
}
/*
结构指针双向通信,
函数内部修改地址指向的值,直接修改的是原始数据,不需要返回,所以返回都是void。
*/
#include <stdio.h>
#include <stdlib.h>
struct namect
{
char fname[20];
char lname[20];
int letters;
};
void getinfo(struct namect *pst;)
{
struct namect temp;
printf("please enter your first name.\n");
gets(pst->fname);
printf("please enter your last name.\n");
gets(pst->lname);
return temp;
}
void makeinfo(struct namect *pst;)
{
pst->letters = strlen(pst->fname)+strlen(pst->lname);
return info;
}
void showinfo(struct namect *pst;)
{
printf("name: %s%s, letters: %d\r\n",pst->fname, pst->lname, pst->letters);
}
int main(void)
{
struct namect person;
getinfo(&person);
makeinfo(person);
showinfo(&person);
return 0;
}
运行结果:
please enter your first name.
zhang
please enter your last name.
shanfeng
name: zhangshanfeng, letters: 13