结构体变量和结构体指针变量作为函数参数传递的问题(主要是说指针的优点)
推荐使用结构体指针变量作为函数参数来传递。
对结构体的内容输入输出
/*
对结构体输入输出的案例
*/
# include <stdio.h>
# include <string.h>
//为需要调用的三个函数,设置前置声明
void InputMember(struct student * pMem);
void OutputOne(struct student * pMem);
void OutputTwo(struct student pMem);
//定义一个结构体
struct student
{
char name[30];
int age;
float score;
}; //这个分号不能省略
int main(void)
{
struct student member;
/*
输入函数,要想跨函数修改值的内容,必须传递指针
*/
InputMember(&member);
/*
输出函数,传递指针输出
*/
OutputOne(&member);
/*
输出函数,传递内容输出
*/
OutputTwo(member);
return 0;
}
/*
定义形参为指针变量,可以跨函数对变量修改
*/
void InputMember(struct student * pMem)
{
strcpy(pMem->name,"张三");
pMem -> age = 23;
pMem -> score = 89.5;
}
/*
通过接受指针的方式,进行输出
*/
void OutputOne(struct student * pMem)
{
printf("%s\n%d\n%f \n", pMem->name, pMem->age, pMem->score);
}
/*
通过赋值的方式进行输出
之所以把这两个函数放到一起写,主要是为了区别:
传递指针 和 传递数据 的区别
*/
void OutputTwo(struct student pMem)
{
printf("%s\n%d\n%f \n", pMem.name, pMem.age, pMem.score);
}
/*
VC++6.0上运行的结果:
=====================================
张三
23
89.500000
张三
23
89.500000
=====================================
结论:
输入函数,必须使用指针操作。
输出函数,传递指针和传递数值结果都是正确的。
但!是!对内存的消耗和执行效率上是不同的。
*/
到底是发送指针还是发送内容
指针的优点之一:
快速的传递数据
耗用内存小
执行速度快
假如有一个占用100字节的类型,如果发送内存的话,在函数中也同样需要开辟出100字节的内存,用于存放发送过来的值,这就消耗了内存。内存开辟出来之后,还要把这100字节的内容给拷贝到函数开辟的内存中,这就消耗了时间。既浪费了内存,又耗费了时间,so,还是推荐使用传递指针的方式。
这就是指针的优点。
学PHP的小蚂蚁 博客 http://my.oschina.net/woshixiaomayi/blog