如下代码定义了一个结构体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的地址。