永发信息网

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

答案:3  悬赏:30  手机版
解决时间 2021-12-25 00:02
  • 提问者网友:蔚蓝的太阳
  • 2021-12-24 17:07
c语言中,函数的形参什么时候必须是指针
最佳答案
  • 五星知识达人网友:轻雾山林
  • 2021-12-24 17:37
情况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楼网友:鸽屿
  • 2021-12-24 18:16
当你需要改变传递进来的参数的数值时 要传给指针
  • 2楼网友:酒醒三更
  • 2021-12-24 17:50
兄弟,那个不是一级指针,那是指针数组 指针数组作为函数形参时会自动转换为指针的指针,也就是你说的二级指针 char **p=book;从这一行也能证明我说的,自动转换 特别注意:它只会转换数组的最内层(我有点分不清内外) int arr[2][6]; int (*aa)[6] = arr;//对 //int *aa1[6] = arr;//错 //int (*aa2)[2] = arr;//错 //int (*aa3)[] = arr;//错 //int *aa4 = arr;//错 //int **aa5 = arr; //错
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯