C语言 结构体 传参与传值

下面的两个函数是 print1 好 还是 print2 好? 

struct Point
{
	int x;
	int y;
}p1 = { 10,15 };
sp;
struct S
{
	char c;
	struct Point  sp;
	double d;
	char arr[20];
};

//void print1(struct S s)  //s 是 结构体 struct S  的重命名
//{
//	printf("%c\n", s.c);  //即找到的是 w
//	printf("%d %d\n", s.sp.x, s.sp.y);   //即找到的是 100 20
//	printf("%1f\n", s.d);
//	printf("%s\n", s.arr);
//}

print2(struct* ps)
{
	printf("%c\n", ps->c);
	printf("%d %d\n", ps->sp.x, ps->sp.y);
	printf("%1f\n", ps->d);
	printf("%s\n", ps->arr);
}
int main()
{
	struct Point p = { 100,200 };  //对第一个结构体的初始化
	struct S ss = { 'w',{100,20},5.5,"hellow" };  //对第二个结构体的初始化
	//printf("%c\n", ss.c);  //即找到的是 w
	//printf("%d %d\n", ss.sp.x, ss.sp.y);   //即找到的是 100 20
	//printf("%1f\n", ss.d);
	//printf("%s\n", ss.arr);

	ss.c = 'b';
	ss.sp.x = 1000;
	ss.sp.y = 2000;
	ss.d = 3.14;

	strcpy(ss.arr, "world");  //strcpy字符串拷贝


	//print1(ss); //打印struct S 类型的变量  传值 占用的内存很大
	print2(&ss);  //传地址,占用的内存很小。只是四个字节或者八个字节的内存。
	return 0;
}

答案:选择 print2 

函数在传参的过程中,参数是需要压栈的。

如果传递一个结构体对象的时候 ,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。

结论:结构体在传参的时候,要穿结构体的地址。

int Add(int x, int y)
{
	int z = 0;
	z = x + y;
	return z;
}

int main()
{
	int a = 10;
	int b = 20;
	int c = 0;
	c = Add(a, b);

	return 0;
}

每一次函数的调用,都需要在栈区开辟一下空间。

传参是从右往左传的,先传右边,后传左边。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值