结构体传参有两种方式,一种是值传递,另一种是地址传递,值传递是值拷贝方式传入函数内,在函数内修改其值并不会影响到传入的实参的值,例如
typedef struct
{
int a;
}TEST_T,*P_TEST_T;
TEST_T test;
void test_func(TEST_T test)
{
test.a++;
printf("test.a = %d in test_func\n",test.a);
}
int main(int argc, char* argv[])
{
test.a = 0;
test_func(test);
printf("test.a = %d in main\n",test.a);
return 0;
}
运行结果如下,实参值未发现变化,还是0
void test_func2(P_TEST_T test)
{
test->a++;
printf("test->a = %d in test_func2\n",test->a);
}
int main(int argc, char* argv[])
{
test.a = 0;
test_func2(&test);
printf("test.a = %d in main\n",test.a);
return 0;
}
运行结果如下,实参的值被修改为1
int main(int argc, char* argv[])
{
TEST_T test2;
test2.a = 8;
test = test2;
printf("test.a = %d\n",test.a);
return 0;
}
运行结果如下
#include "string.h"
int main(int argc, char* argv[])
{
TEST_T test2;
test2.a = 18;
memcpy(&test,&test2,sizeof(test));
printf("test.a = %d\n",test.a);
return 0;
}
运行结果如下