结构体,共用体,枚举,宏定义,预处理

2023-12-04  本文已影响0人  娇娇_5038

1.结构体

1.1 为什么需要结构体?

没有结构体之前,在C语言中,数据的组织依靠 变量+数组,最初最简单的时候,只需要使用基本数据类(int,char,float,double) 来定义单个变量,需要几个变量就定义几个变量,后来情况变复杂了,有时候需要很多意义相关的变量,这个时候数组出现了,数组解决了需要很多类型相同,意义相关变量的问题,但是数组是有限的,数组最大的不足在于,一个数组只能存储很多类型相关的变量

使用一个数据结构来保存一个学生所以的信息:姓名,学号,性别这时候需要结构体

1.2 什么是结构体?

结构体是一种里面包含很多种元素,这些元素的数据类型可以相同,也可以不同,所以结构体是一种数据封装的方法

新增关键字 struct ,是struct定义结构体

定义了一个Student结构体

注:结构体类型的定义实在函数的外面,结构体定义的是一个新的组合类型,而不是变量,不会消耗内存,在需要定义的地方,再使用结构体类型定义变量

struct Student{

char name[20];//学生姓名

unsigned int num;//学号

int isMale;//性别

}

int main(void){

//定义了一个结构体变量

struct Student s1;

//给结构体进行赋值

s1.name='jiaojiao';

s1.num=110200;

s1.isMale=1;

return 0;

}

1.3数据结构:把庞大复杂的数据用一定的方法组织起来,便于操作(查找,增加,删除)等,这叫做数据结构

结构体和数组的关联,数组是一种特殊的结构体,特殊之处在于封装内的各个元素类型是相同的。结构体各个元素类型可以是不同的

1.4使用结构体步骤

1.4.1定义结构体,定义结构体需要在全局里定义

 struct Student {

char name[20];//学生姓名

unsigned int num;//学号

int isMale;//性别

}

1.4.2.使用结构体 ,使用的是结构的体的各个元素,而不是结构体本身

struct Student s1;

s1.name='jiaojiao';

s1.num=110200;

s1.isMale=1;

1.4.3.结构体初始化

1.4.3.1 完成初始化

{xxx,xxx,xx,x,x}

第二种不完全初始化,如果某个元素没初始化,值是随机的

{

.a=xx,

.b=xx,

.c=xx

}

2.共用体

共用体,共用体内只有一个东西,只是它被好几个名字(或者类型)公用

共用体定义和结构体定义一样,使用也一样,只是关键字不一样

Union

2.1定义共用体 

2.2使用共用体步骤

2.2.1第一步定义共用体类型

union myUnion

{

int a;

char b;

float c;

}

2.2.2使用公用体

int main(void){

union myUnion u1;

u1.a=124;

printf("u1.a = %d,u1.b = %d",u1.a,ui.b)

}

2.3结构体和公用体组合使用

#include <stdio.h>

struct Male{

int age;

char name[20];

int basketball;

}

struct Female{

int age;

char name[20];

int  aerobics;

}

union student{

  struct  Male m;

  struct  Female f;

}

int main(void){

union student s[30];

s[0].m.basketball = 47;

s[1].m. aerobics  = 44;

}

3.枚举

#include <stdio.h>

 enum week {

SUN,

MON,

TUE,

WEN,

THU,

FRI,

SAT

}

int main(void){

 enum week today;

today=SAT

switch(today){

case Mon:

printf("今天星期一");

defaut:

printf("今天不是星期一");

}

}

4.宏定义

#define N 321

#define PI  3.14

#define S(r) (PI * (r) * (r))

#define Sen_year (365 * 24 * 60 * 60)UL //把这个数转为一个 unsigned long

宏定义必须定义在全局里

宏定义必须先定义再使用,否则会报错

宏定义名一般是大写(这个不是语法定义的,一般约成的)

宏定义的式子必须用()括号括起来

为什么使用宏定义

在C语言中,一般使用常数时候,都是不直接使用,而是把该常数定义个宏,然后在程序中使用宏,这样的好处是,等我们需要修改这个常数时,只需要在宏定义处修改一次即可

5.预处理

上一篇 下一篇

猜你喜欢

热点阅读