您当前的位置: 首页 >  c语言

仙剑情缘

暂无认证

  • 0浏览

    0关注

    333博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

仙剑情缘 发布时间:2021-08-15 10:42:32 ,浏览量:0

结构体传参有两种方式,一种是值传递,另一种是地址传递,值传递是值拷贝方式传入函数内,在函数内修改其值并不会影响到传入的实参的值,例如
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;
}

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

关注
打赏
1658017818
查看更多评论
立即登录/注册

微信扫码登录

2.2530s