关于C语言的函数传参,有时候由于数据量比较大,比如参数是一个结构体,我们会考虑用结构体指针来传参,以避免在函数调用时发生大量数据的拷贝 。有两种形式,一种是用在参数列表里面,而当仅仅是获取某些数据时,可以考虑使用不带参数的函数调用,通过函数返回值来获取数据。
下面的例子是采用指针传递参数、获取数据时,可能会踩到的坑:
#include <stdlib.h>
#include <stdio.h>
typedef struct TEST_STRUCT
{
int a[4];
char b[20];
} sParam, *p_sParam;
sParam *get_param2()
{
sParam data = {0};
for(int i=0; i<4; i++)
{
data.a[i] = 2;
}
strcpy(data.b, "22222");
//能够打印出data的数据
for(int i=0; i<4; i++){
printf("data.a[%d]=%d\n",i,data.a[i]);
}
printf("data.b=%s\n",data.b);
return &data;//函数返回data的地址,但同时这个地址的内存空间被释放(局部变量),所以实际返回的是一个野指针
}
int get_param1(sParam *mydata)
{
if(NULL == mydata)
return -1;
sParam data = {0};
for(int i=0; i<4; i++)
{
data.a[i] = 1;
}
strcpy(data.b, "hhhh");
mydata &