以下程序段转载自http://www.quanxue.cn/JC_CLanguage/CLang/Clang21.html
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct p_type {
char id[4]; //编码
char name[16]; //姓名
};
//结构体变量作参数
void setByVar(struct p_type per) {
strcpy(per.id, "202");
strcpy(per.name, "张展");
return ;
}
//结构体指针作参数
void setByAdd(struct p_type *per) {
strcpy(per->id , "303");
strcpy(per->name, "张腾");
return ;
}
//结构体变量作返回值
struct p_type setNewByVar() {
static struct p_type zh; //一定要是静态变量才能作为返回值
strcpy(zh.id, "404");
strcpy(zh.name, "张翅");
return zh;
}
//结构体指针作返回值
struct p_type *setNewByAdd() {
struct p_type *p;
p = (struct p_type *)malloc(sizeof(struct p_type));
strcpy(p->id, "505");
strcpy(p->name, "张去");
return p;
}
void print(const struct p_type *per) {
printf("%s, %s\n", per->id, per->name);
return ;
}
int main(void)
{
struct p_type zhang, *p, tmp;
//变量中的初始值
strcpy(zhang.id, "101");
strcpy(zhang.name, "张飞");
//用变量直接作参数,值不能被修改
setByVar(zhang);
print(&zhang); //结果:101, 张飞
//用指针直接作参数,值可以被修改
setByAdd(&zhang);
print(&zhang); //结果:303, 张腾
//用变量直接作返回值,OK
tmp = setNewByVar();
print(&tmp); //结果:404, 张翅
//用指针直接作返回值,OK
p = setNewByAdd();
print(p); //结果:505, 张去
free(p); //释放内存不能忘记
return 0;
}