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

结构体

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

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

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

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

定义完怎么用

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

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

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

    struct Student{
        int a; //对的
        int b = 100;//错的
    }
    
  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;
    }
    

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

struct Student {  
   成员变量
}结构体变量;

//如下
struct Student {  
   int num;  //学生序号
   int score;  //成绩
   float avg;  //平均分
}Tom;

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

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

Typedef 的使用

  1. Typedef 有什么用?

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

  2. Typedef 怎么用?

    答: 语法如下:

    typedef 已知数据类型 别名(即外号);	//语法
    
    //以下为案例
    typedef int T;     //现在int 和 T 是等价的了
    int a = 100; 
    T b = 999;	//这个相当于int b =999;
    
  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; 
    

结构体数组

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

typedef struct student {  //结构体名称
		成员变量;
	}stu; 
stu 数组名[数组长度];  //这样定义结构体数组

例:
    stu arr[10];//这里用的别名定义
	struct student arr01[10];  //这里用结构体名称定义,都是可以的

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

struct Student {  
	成员变量
}数组名[数组长度];
如:
    struct Student {  
	成员变量
}arr[10];

结构体数组的初始化:

(和结构体变量一样)

例:

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
        */
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值