c语言结构体元素作为函数参数传的是值,不是地址

如下代码定义了一个结构体Student,main函数中定义了两个结构体变量s1和s2。初始赋值后,调用change1和change2函数,参数分别为s1和&s2。

#include<stdio.h>
typedef struct Student {
	int id;
	int age;
}Student;
void change1(Student s) {
	s.id=10;
	s.age=20;
}
void change2(Student *s) {
	s->id=10;
	s->age=20;
}
int main() {
	Student s1,s2;
	s1.id=1;
	s1.age=2;
	s2.id=1;
	s2.age=2;
	printf("s1修改1前id为%d,age为%d\n",s1.id,s1.age);
	printf("s2修改2前id为%d,age为%d\n",s2.id,s2.age);
	change1(s1);
	change2(&s2);
	printf("s1修改1后id为%d,age为%d\n",s1.id,s1.age);
	printf("s2修改2后id为%d,age为%d\n",s2.id,s2.age);
	return 0;
}

打印结果:

图片资源丢失

代码中函数change1参数为Student类型,函数change2参数为Student指针类型,打印结果表明:change1函数未改变s1内容,change2函数改变了s2内容。据此可推测"change1(s1);"中传给change1函数形参的是s1的值而不是s1的地址。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值