目录
- 结构体类型的声明
- 结构体初始化
- 结构体成员访问
- 结构体传参
结构体的声明
结构的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
结构的声明
1 2 3 4
| struct tag { member-list; }variable-list;
|
代码实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h>
typedef struct Stu { char name[20]; int age; char sex[5]; char id[20]; }Stu;
int main() { struct Stu s1; Stu s2; return 0; }
|
结构成员的类型
结构的成员可以是标量(普通变量)、数组、指针,甚至是其他结构体。
结构体变量的定义和初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| struct Point { int x; int y; }p1; struct Point p2;
struct Point p3 = { x,y };
struct Stu //类型声明 { char name[15]; int age; }; struct Stu s = { "zhangsan", 20 };
struct Node { int data; struct Point p; struct Node* next; }n1 = { 10, { 4, 5 }, NULL }; struct Node n2 = { 20, { 5, 6 }, NULL };
|
代码实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h>
struct S { int a; char c; char arr[20]; double d; };
struct T { char ch[10]; struct S s; char *pc; };
int main() { char arr[] = "hello learner\n"; struct T t = { "study", {100, 'w', "hello world", 3.14}, arr}; printf("%s\n", t.ch); printf("%s\n", t.s.arr); printf("%lf\n", t.s.d); printf("%s\n", t.pc);
return 0; }
|
结构体成员的访问
结构体传参
结构体变量访问成员 结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| typedef struct Stu { char name[20]; short age; char tele[12]; char sex[5]; }Stu;
void Print1(Stu tmp) { printf("name: %s\n", tmp.name); printf("age: %d\n", tmp.age); printf("tele: %s\n", tmp.tele); printf("sex: %s\n", tmp.sex); }
void Print2(Stu* ps) { printf("name: %s\n", ps->name); printf("age : %d\n", ps->age); printf("tele: %s\n", ps->tele); printf("sex : %s\n", ps->sex); }
int main() { Stu s = { "李四", 40, "15598886688", "男" }; Print1(s); Print2(&s);
return 0; }
|
💐标准解答
函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
结论: 结构体传参的时候,要传结构体的地址。