C语言——结构体、枚举类型、变量类型

一、结构体

       多个相同类型的数据构成的集合叫做数组,多个不同类型的数据构成的集合叫做结构体。

        结构体类型的作用域:

         ①  定义在函数外面:全局有效(从定义类型的那行开始,一直到文件结尾)

         ②  定义在函数(代码块)内部:局部有效(从定义类型的那行开始,一直到代码块结束)

      1、结构体的定义

          struct是关键字,是结构体类型的标志

               

 1 struct 结构体名{
 2      
 3      类型名1 成员名1;
 4      
 5      类型名2 成员名2;
 6      
 7      ……
 8      
 9      类型名n 成员名n;   
10      
11  };

       2、结构体变量的定义

         ①  先定义结构体类型,再定义结构体变量

              

1 struct Student {
2      char *name;
3      int age;
4  };
5  
6  struct Student stu;

         ②  定义结构体的同时定义变量

   

1 struct Student {
2     char *name;
3     int age;
4 } stu;

        ③  定义结构体变量,省略类型名

 

1 struct {
2     char *name;
3     int age;
4 } stu;

   2、注意事项

      ①  结构体内可以包含别的结构体

         

 1 struct Date {
 2      int year;
 3      int month;
 4      int day;
 5  };
 6  
 7  struct Student {
 8      char *name;
 9      struct Date birthday;
10  };

     ②  只有定义属于结构体类型的变量时,系统才会分配存储空间给变量

1 struct Student {
2      char *name;
3      int age;
4  };
5  
6  struct Student stu;

    ③  结构体变量占用的内存空间是其成员所占内存之和

  3、结构体的初始化

      对各成员初始化,一一对应赋值

     

1 struct Student {
2      char *name;
3      int age;
4  };
5  
6  struct Student stu = {"gaizuojia", 22};

 

  4、 结构体的使用

    ① 对结构体变量的操作是以成员为单位进行,格式:结构体变量名.成员名

      

1 // 访问stu的age成员
2  stu.age = 22;

     ② 相同类型的结构体变量之间可以进行整体赋值

   

1 // 将stu1直接赋值给stu2
2  struct Student stu2 = stu1;

 5、结构体数组

    结构体数组的定义和普通结构体类似。

   

1 //结构体数组初始化
2 struct {
3     char *name;
4     int age;
5 } stu[2] = { {"MJ", 27}, {"JJ", 30} };

6、 结构体指针

    ①  指向结构体的指针的定义

        

  struct Student *p;

    ②  利用指针访问结构体的成员

1             (*p).成员名称
2 
3              p->成员名称

7、结构体与函数

      ①  如果结构体作为函数参数,只是将实参结构体所有成员的值对应地赋值给了形参结构体的所有成员

      ②  修改函数内部结构体的成员不会影响外面的实参结构体

 

 1 struct Student
 2 {
 3     int age;
 4     int no;
 5 };
 6 
 7 // 修改函数内部结构体的成员不会影响外面的实参结构体
 8 void dfy(struct Student s)
 9 {
10     s.age = 30;
11     s.no = 2;
12 }
13 
14 // 会影响外面的实参结构体
15 void dfy2(struct Student *p)
16 {
17     p->age = 15;
18     p->no = 2;
19 
20 }

 

二、枚举类型

    1、定义枚举类型

      

 1     // 1.定义枚举类型
 2     enum Season
 3     {
 4         spring = 1,
 5         summer,
 6         autumn,
 7         winter
 8     };
 9     
10   

   2、定义枚举变量

   

1    
2     // 定义枚举变量
3     enum Season s = 100000;

 3、遍历枚举元素操作  

  

enum Season {spring, summer, autumn, winter} s;

// 遍历枚举元素
for (s = spring; s <= winter; s++) {
    printf("枚举元素:%d \n", s);
}

三、  变量类型(根据作用域范围的不同可以分为全局变量和局部变量)

   1、全局变量

         ① 定义:在函数外面定义的变量

         ② 作用域:从定义变量的那一行开始,一直到文件结尾(能被后面的所有函数共享)

         ③ 生命周期:程序一启动就会分配存储空间,程序退出时才会被销毁

         ④ 默认的初始值就是0

   2、局部变量

         ①  定义:在函数(代码块)内部定义的变量(包括函数的形参)

         ②  作用域:从定义变量的那一行开始,一直到代码块结束

         ③ 生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收

         ④ 没有固定的初始值

 

 1 #include <stdio.h>
 2 
 3 int age;//全局变量
 4 
 5 void bianliang()
 6 {
 7     int age;
 8     age = 10;
 9 }
10 
11 int main()
12 {
13     printf("%d\n", age);// 0
14     
15     int age = 20;//局部变量
16     
17     printf("%d\n", age);// 20
18     
19    bianliang();
20     
21     printf("%d\n", age);// 20
22     return 0;
23 }

 

 

 

转载于:https://www.cnblogs.com/gaizuojia/p/4356871.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值