• C语言结构体讲解(通俗易懂)


    结构体

    什么是结构体?怎么定义?

    答:用户自己建立由不同类型数据组成的组合型的数据结构,它称之为结构体。(个人感觉和java的父类由那么一点像)

    记住下面这个格式就行了,这个就是结构体的格式

    struct 结构体名称 {			//定义一个结构体
    	成员列表;  
    };    //这里有个冒号,也是需要的
    
    • 1
    • 2
    • 3

    定义完怎么用

    1. 定义完后,这个结构体可以当作数据类型来使用(就和int,double,boolean一样的数据类型来使用)。

      **注意:**用的时候是 (struct 结构体名称)连着一起用的,也就是说 (struct 结构体名称)这个是整体,要把这个整体当成数据类型。

    2. 在使用结构体定义一个变量之后,该变量可以访问结构体的成员。

    如:

    #include<stdio.h>
    struct Student {  //定义一个结构体
    	int num;  //学生序号
    	int score;  //成绩
    	float avg;  //平均分
    };
    int main() {
        //这个Tom现在就是一个结构体变量了,而且我可以通过这个变量访问结构体(包括其成员)
        struct Student Tom;   
        Tom.num = 199;  //Tom调用了结构体里的成员  
    	printf("%d\n",Tom.num);  //199
        struct Student* p = &Tom;   //定义一个结构体指针变量,并指向Tom的地址
    	p->num = 100;  //指针p调用num,并改成100
    	printf("%d\n", p->num);  //100
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    访问成员规则:

    1. 结构体普通变量通过 “.” 来访问成员 例如,Tom.num; //这样我就调用了结构体里面的变量了(代码区第10)
    2. 结构体指针变量通过"->" (减号和这个符号>) 。例如,p->num; //这样就调用了结构体的变量了(代码区第十二行)

    结构体内的成员怎么赋值?

    1. 结构体内的成员变量是不能赋值的。

      struct Student{
          int a; //对的
          int b = 100;//错的
      }
      
      • 1
      • 2
      • 3
      • 4
    2. 结构体内的成员变量通过结构体变量给结构体里的成员变量赋值

      #include<stdio.h>
      struct Student {  //定义一个结构体
      	int num;  //学生序号
      	int score;  //成绩
      	float avg;  //平均分
      };
      int main() {
          struct Student Tom = {1,2,3};//num = 1,score=2,avg=3;   
      
          return 0;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

    定义结构体的时候定义结构体变量(只能定义一次)

    struct Student {  
       成员变量
    }结构体变量;
    
    //如下
    struct Student {  
       int num;  //学生序号
       int score;  //成绩
       float avg;  //平均分
    }Tom;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    定义结构体时,省略结构体名,直接定义结构体变量(也是只能定义一次,因为定义多次可能会乱)

    • 代码和上面一样,只是少了Student

    Typedef 的使用

    1. Typedef 有什么用?

      答:理解为给已知的(int、double之类的,然后结构体也可以)数据类型起一个外号。

    2. Typedef 怎么用?

      答: 语法如下:

      typedef 已知数据类型 别名(即外号);	//语法
      
      //以下为案例
      typedef int T;     //现在int 和 T 是等价的了
      int a = 100; 
      T b = 999;	//这个相当于int b =999;
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    3. typedef 在结构体中的定义

      注意

      1. 在结构体定义的别名作用同上面一样
      2. 用别名定义结构体变量,别忘了结构体名称本身也可以定义结构体变量

      语法如下:

      typedef struct 结构体名称{
          成员变量;
      }别名;
      
      //以下为案例:
      typedef struct student {  //结构体名称
      		int a;
      		int b;
      	}stu; //别名为stu
      	stu c; //用别名定义一个结构体变量,实际上就是struct student c;
      	c.a = 10; //调用结构体内的成员变量
      	printf("%d\n",c.a);//输出10; 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

    结构体数组

    语法:就是在结构体名称后面加个数组的定义

    typedef struct student {  //结构体名称
    		成员变量;
    	}stu; 
    stu 数组名[数组长度];  //这样定义结构体数组
    
    例:
        stu arr[10];//这里用的别名定义
    	struct student arr01[10];  //这里用结构体名称定义,都是可以的
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    定义结构体的同时定义结构体数组:

    struct Student {  
    	成员变量
    }数组名[数组长度];
    如:
        struct Student {  
    	成员变量
    }arr[10];
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结构体数组的初始化:

    (和结构体变量一样)

    例:

    struct stu {
    		int a;
    		int b;
    	};
    	struct stu arr[3] = { {1,2},{3,4},{5,6} }; //初始化
    	for (int i = 0; i < 3; i++) {
    		printf("a=%d,b=%d \n", arr[i].a, arr[i].b);//输出
            /*
            a=1,b=2
    		a=3,b=4
    		a=5,b=6
            */
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    T31开发笔记:GPIO控制
    MySQL详细学习教程(建议收藏)
    mysql使用小记--group_concat()、sum()
    MySQL软件常见操作
    如何用FLStudio水果21中文版创作音乐?(官方基础教程中文版)
    【我的OpenGL学习进阶之旅】当你运行OpenGL程序的时候,程序并不绘制任何内容,并且白屏和黑屏的时候怎么排查?
    27.CSS粒子特效
    C++精通之路:红黑树
    【Mybatis】使用IDEA创建第一个Mybatis入门程序
    本地部署腾讯的tmagic-editor低代码
  • 原文地址:https://blog.csdn.net/m0_52228020/article/details/124975299