文章时效性提示
本文发布于 514 天前,部分信息可能已经改变,请注意甄别。
结构体类型声明
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
结构的声明:
1 2 3 4 5
| struct tag { member-list; } variable-list;
|
struct:结构体关键字
tag:结构体标签
struct tag:结构体类型
member-list:结构体成员
variable-list:变量列表
例如描述一个学生:
——名字、年龄、电话、性别
1 2 3 4 5 6 7 8 9 10 11 12 13
| struct Stu { char name[20]; short age; char tele[12]; char sex[5]; }s1,s2,s3;
int main() { struct Stu s; return 0; }
|
s1,s2,s3是3个全局的结构体变量(尽量少使用)
s是局部的结构体变量
1 2 3 4 5 6 7 8 9 10 11 12
| typedef struct Stu { char name[20]; short age; char tele[12]; char sex[5]; }Stu;
int main() { Stu s2; return 0; }
|
typedef struct Stu{...}Stu意思是把struct Stu重新取名字叫Stu。
有关typedef:参见
结构体成员的类型
可以是标量、数组、指针或其他结构体
结构体变量的定义和初始化
1 2 3 4 5 6 7 8 9 10 11 12 13
| typedef struct Stu { char name[20]; short age; char tele[12]; char sex[5]; }Stu;
int main() { Stu s1 = {"张三",20,"18888888888","男"}; struct Stu s2 = {"李四",99,"12345678900","女"}; 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
| 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[] = "def"; struct T t = {"abc",{100,'w',"hello world",333.333},arr}; printf("%s\n",t.ch); printf("%s\n",t.s.arr); printf("%lf\n",t.s.d); return 0; }
|
打印的结果是:
1 2 3
| abc hello world 333.333000
|
结构体成员的访问
结构体变量访问成员,是通过点操作符(.)访问的。
结构体传参
下例打印结构体数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| typedef struct Stu { char name[20]; short age; char tele[12]; char sex[5]; }Stu;
void print1(Stu s) { printf("name : %s\n",s.name); printf("age : %d\n",s.age); printf("telephone : %s\n",s.tele); printf("sex : %s\n",s.sex); }
int main() { Stu s1 = {"张三",20,"18888888888","男"}; print1(s1); return 0; }
|
或使用箭头操作符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| typedef struct Stu { char name[20]; short age; char tele[12]; char sex[5]; }Stu;
void print2(Stu* ps) { printf("name : %s\n",ps->name); printf("age : %d\n",ps->age); printf("telephone : %s\n",ps->tele); printf("sex : %s\n",ps->sex); } int main() { Stu s1 = {"张三",20,"18888888888","男"}; print2(&s1); return 0; }
|
print2的函数性能优于print1,直接通过指针,可以节约内存空间。