结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量
数组:一组相同类型元素的集合
结构体:其实是一组不一定相同类型元素的集合
- //结构声明
- // struct tag //tag根据实际情况给名字
- // {
- // member-list; //成员列表(1个或者多个)
- // }variable-list;//变量列表
-
- //描述一个学生
- //名字+年龄+性别
-
- //声明结构体类型
- // struct Stu
- // {
- // //成员变量,是用来描述结构体对象的相关属性的
- // char name[20];
- // int age;
- // char sex[5]; //男 女 保密
- // }; //s2,s3,s4;//s2,s3,s4就是结构体变量 - 全局变量
-
- // typedef struct Stu //重命名
- // {
- // //成员变量,是用来描述结构体对象的相关属性的
- // char name[20];
- // int age;
- // char sex[5]; //男 女 保密
- // } Stu;
-
- // int main()
- // {
- // struct Stu s1; //局部变量
- // //Stu s2; //在c语言中,没有对结构体类型typedef,struct关键字不能省略
-
-
- // return 0;
- // }
- //结构成员的类型
- struct S
- {
- int a;
- char arr[5];
- int* p;
- }s1 = {100,"fan",NULL};
-
- //int n = 2023;
- // struct S s2 = {98,"111",&n};
- struct S s2 = {98,"111",NULL};
-
-
- struct B
- {
- char arr[10];
- struct S s;
- double d;
- };
-
-
- int main()
- {
- struct S s3 = {.arr = "aaa", .a = 10, .p = NULL};
- //printf("%d %s %p\n",s1.a,s1.arr,s1.p); //结构成员访问操作符
- //printf("%d %s %p\n",s2.a,s2.arr,s2.p);
- //printf("%d %s %p\n",s3.a,s3.arr,s3.p);
- struct B b = {"hello",{20,"aaa",NULL},3.14};
- printf("%s %d %s %p %lf\n",b.arr, b.s.a, b.s.arr, b.s.p, b.d);
- return 0;
- }
- struct Stu
- {
- /* data */
- char name[20];
- int age;
- };
-
- // void set_stu(struct Stu* ps)
- // {
- // (*ps).age = 20;
- // //t.name = "张三"; //err
- // strcpy((*ps).name,"张三"); //字符串拷贝
- // }
-
- void set_stu(struct Stu* ps)
- {
- ps->age = 20; //结构体成员访问操作符 结构体指针 -> 结构体成员
- //t.name = "张三"; //err
- strcpy(ps->name,"张三"); //字符串拷贝
- }
-
- void printf_stu(struct Stu t)
- {
- printf("%s %d\n",t.name,t.age);
- }
-
- int main()
- {
- struct Stu s = {0};
- set_stu(&s); //传值调用
- printf_stu(s);
-
- return 0;
- }
- //结构体传参
- struct S
- {
- /* data */
- int data[1000];
- int num;
- };
-
- struct S s = {{1,2,3,4},1000};
- //结构体传参
- void print1(struct S s)
- {
- printf("%d\n",s.num);
- }
- //结构体地址传参
- void print2(struct S* ps)
- {
- printf("%d\n",ps->num);
- }
-
- int main()
- {
- print1(s); //传结构体
- print2(&s);//传地址
-
- return 0;
- }
- //结构体传参,尽量选用结构体地址传参