c语言中,函数的形参什么时候必须是指针

如题所述

情况1 需要读入的数据是比较大的数据,使用指针作为参数可以节省堆栈
比如 定义1个结构体
typedef struct test
{
char buffer1[10000];
char buffer2[10000];
//后面还有一大堆成员
}test_ts;
void Func1(test_ts t1)
{
//函数体是对t1成员进行Read处理
}
void Func2(test_ts *t1)
{
//函数体是对t1成员进行Read处理
}
上面2个函数功能其实一样,但函数Func2参数只是一个指针占的空间就4 Byte,
Func1参数是一个结构体,占的空间就看成员多少,但例子的使用的堆栈最少20000Byte了。

情况2 需要对数据进行改写
一般对应的数据是数组或结构体数据。
比如memset函数函数,用于把传入指针的数据写入对应的数据。
具体函数体内容不贴了,baidu查下吧。
例如还是这个结构体test_ts
test_ts t2;
如果需要将t2的每个成员初始化成0,可以把每个成员挨个赋值成0。
但如果用下面这样代码
memset(&t2,0,sizeof(t2));
一行搞定
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-01-25
当你需要改变传递进来的参数的数值时 要传给指针
相似回答