C语言之结构体传参及赋值

结构体传参有两种方式,一种是值传递,另一种是地址传递,值传递是值拷贝方式传入函数内,在函数内修改其值并不会影响到传入的实参的值,例如

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;
}

运行结果如下
在这里插入图片描述

使用memcpy函数进行赋值

#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;
}

运行结果如下
在这里插入图片描述


版权声明:本文为mygod2008ok原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。