结构体成员的访问
结构体变量访问成员结构变量的成员是通过点操作符(.)访问的
点操作符接受两个操作数
- 例如
struct Stu { char name[20]; int age; }; struct Stu s;//创建变量s
s 有成员 name 和 age
struct S s; strcpy(s.name, "zhangsan");//使用.访问name成员 s.age = 20;//使用.访问age成员
结构体指针访问指向变量的成员
当得到的是指向一个结构体的指针
则需先对指针解引用再用(.)操作符
或者'指针->成员'(指针指向对象,生动形象)
- 例如
struct Stu { char name[20]; int age; }; void print(struct Stu* ps) { printf("name = %s age = %d\n", (*ps).name, (*ps).age); //使用结构体指针访问指向对象的成员 printf("name = %s age = %d\n", ps->name, ps->age); } int main() { struct Stu s = {"zhangsan", 20}; print(&s);//结构体地址传参 return 0; }
结构体传参
对于传参有传值和传址之分
- 例如
struct S { int data[1000]; int num; }; struct S s = {{1,2,3,4}, 1000};
- 结构体传值
1. //结构体传参 2. void print1(struct S s) 3. { 4. printf("%d\n", s.num); 5. }
- 结构体传址
1. //结构体地址传参 2. void print2(struct S* ps) 3. { 4. printf("%d\n", ps->num); 5. }
1. int main() 2. { 3. print1(s); //传结构体 4. print2(&s); //传地址 5. return 0; 6. }
其实效果都一样,两者都可以选择
but
推荐结构体传址
函数传参的时候,参数是需要压栈的,压栈会占用空间
如果传递一个结构体对象的时候,结构体过大的话
那么参数压栈的的系统开销比较大,会导致性能下降