插播小知识
1.char 、int 、short、double、等等都是C语言的内置类型
结构体的声明
结构的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量
这里的结构就是结构体
前面我的学习的数组:一组相同类型元素的集合
结构的声明
struct tag
{
member - list ;
} variable - list ;
结构体关键字:struct
结构体类型名字:tag
成员列表: member-list 可以是一个或者多个
variable-list:变量列表
#include <stdio.h> struct Studey { //描述学生的相关属性 char name[20]; int age; char sex[5]; char tele[12]; } s3, s4; //s3.s4是结构体类型的变量 //全局变量 int main() { struct Studey s1; struct Studey s2; return 0; }
代码中有两种定义结构体类型 ,s3,和s4的定义的是结构体类型变量,是全局变量,s1和s2定义结构体类型变量,是局部变量,
有小可爱觉得定义结构体类型变量有点繁琐,我们可以使用typedef类型重定义
#include <stdio.h> typedef struct Studey { //描述学生的相关属性 char name[20]; int age; char sex[5]; char tele[12]; } Stu; int main() { Stu s1; Stu s2; return 0; }
结构成员的类型
结构的成员可以是变量、数组、指针,甚至是其他结构体。
#include <stdio.h> struct B { char c; int i; }; struct C { char c; int num; int arr[10]; double* pd; struct B b; struct B* pb; } s0; struct B s1; int main() { return 0; }
结构体变量的定义和初始化
#include <stdio.h> struct B { char c; int i; }; struct C { char c; int num; int arr[10]; double* pd; struct B b; struct B* pb; } s0; struct B s1; int main() { // 按照顺序初始化 double a = 10; struct C s2 = { 'q', 100, {1,2,3}, &a, {'a', 99}, NULL }; //指定成员初始化 struct C s3 = { .c = 's', .num = 100 }; return 0; }
初始化有两种,一种是全部初始化,一种是部分初始化。
结构体成员的访问
.
->
#include <stdio.h> #include <string.h> struct S { char name[20]; int age; }; void set_s(struct S* t) { //s.name = "zhangsan"; t->age = 18; strcpy(t->name, "张三"); } int main() { struct S s = { 0 }; //写一个函数给s中存放数据 set_s(&s); return 0; }
需要注意的是往数组名里写入数据要使用strcpy ,因为数组名是一个常数,往常数里面是不能写入数据的,
结构体传参
#include <stdio.h> #include <string.h> struct S { char name[20]; int age; }; void set_s(struct S* t) { //s.name = "zhangsan"; t->age = 18; strcpy(t->name, "张三"); } void prit_s(struct S* s) { printf("%d\n%s", s->age, s->name); } int main() { struct S s = { 0 }; //写一个函数给s中存放数据 set_s(&s); //打印结构体 prit_s(&s); return 0; }
如果是打印结构体一般是传地址过去,因为创建形参会在栈区申请一块空间,如果使用传值,空间的申请就很大,如果传址,就会节省很大空间,
结论:
结构体传参的时候,要传结构体的地址。
总结:
结构体就介绍到这里了,有不懂的小可爱可以私聊我