语言------结构体 枚举学习,有需要的朋友可以参考下。
结构体 枚举
1.局部变量:
>定义.在代码块内部定义的变量都是局部变量,包括形参
>作用域.从定义变量的那一行开始,一直到代码块结束
>存放位置.存放在栈中
>生命周期.执行到定义变量的那一行开始分配存储空间,代码块结束后就释放
>特点:没有固定的初始化值
2.全局变量:
>定义.在函数外定义的变量
>.作用域.从定义变量的那一行开始,一直到文件末尾
>存放位置.静态区
>生命周期.程序一启动就会分配存储空间,知道程序结束才会释放
特点:默认初始化值是0
结构体基本概念
变量类型变量名;
结构体变量类型变量名;
想定义结构体变量分为两部:
1.定义结构体类型
2.通过结构体类型定义结构体变量
struct结构体类型名称
{
成员(属性)
}
给结构体赋值要通过.的方式赋值
注意点
,只能在定义结构体变量的同时进行初始化,不能先定义结构体变量再初始化
结构体内存分析
1.定义结构体类型,
定义结构体类型的时候不会为结构体类型分配存储空间
struct Date
{
int year; //年
int month; //月
int day; //日
};
2.定义结构体变量
只有在定义结构体变量的时候才会真正的分配存储空间
结构变量存储值也数组也一样,也是从小到大的存,
也就是说从第一个成员开始存放
结构体变量的地址就是它第一个成员的地址
注意:结构体在分配存储空间的时候有一个补齐算法
结构体所占存储空间的大小,必须是占用内存最大成员的字节数的倍数
结构体变量的定义方式:
1.第一种方式:先定义结构体类型,再定义结构体变量
1.定义结构体类型
struct Student
{
int age;
char *name;
};
2.通过结构体类型定义结构体变量
struct Student stu;
2.第二种定义方式:定义结构体类型的同时定义结构体变量
struct Student
{
int age;
char *name;
} stu;
struct Student stu2;
3.第三种方式:定义结构体类型的同时定义结构体变量,并且这个结构体类型没有名称
struct
{
intage;
char*name;
} stu;
缺点:不能复用
结构体类型的作用域:
在函数外定义的结构体类型的作用域是从定义的那一行开始一直到文件末尾
在代码块中定义的结构体类型的作用域和局部变量的作用域相同
结构体类型的作用域:
> 1.定义在函数外面:全局有效(从定义的那一行开始一直到文件末尾)
> 2.定义在函数里面:局部有效(从定义的那一行开始一直到函数结束)
结构体指针
变量类型*变量名;
struct Student *sp;
sp = &stu;
*sp == stu
stu.age
注意点:.的优先级要比*的优先级高,所以要先用()提高*的优先级
(*sp).age = 66;
当利用指针指向结构体变量后的几种访问方式
1.变量名.成员 stu.age;
2.(*指针变量名).成员; (*sp).age;
3.指针变量名->成员; sp->age;
结构体嵌套定义:
定义结构体类型的时候,类型当中的成员还是一个结构体
如果结构体中的成员还是结构体的时候可以通过.逐层访问
枚举
枚举是一种基本数据类型
当某一个变量只有固定的几个取值的时候可以定义枚举变量
想定义枚举变量必须先定义枚举类型,定义枚举类型的作用是告诉系统枚举有哪些取值
1.先定义枚举类型
enum枚举名称
{
取值
}
枚举的本质就是整型
枚举的取值默认情况是从0开始依次递增
2.通过枚举类型定义枚举变量
虽然表面上看上去只能给枚举变量赋值我们定义的几个固定的值,
但是枚举变量的本质就是一个整型变量所以也可以赋值其它整型常量
数据类型总结
1.基本数据类型
整型:
int 4个字节%d
short 2个字节%hd
long 8个字节%ld
long long 8个字节%lld
unsigned 4个字节0和正数0~2(32)-1; %u
signed 4个字节正数负数和0 -2(31)~2(31)-1
字符型:
char 1个字节%c
存储细节: ASCII值0~127
浮点型:
float 4个字节%f
double 8个字节%lf
枚举类型:
> 1.先定义枚举类型,再通过枚举类型定义枚举变量
> 2.定义格式: enum枚举类型名称{取值}; enum枚举类型名称变量名称;
> 3.枚举的本质就是整型
2.构造类型
数组:
只能存放同一种类型的数据
元素类型变量名[元素个数];
结构体:
可以存放不同类型的数据
*定义结构体类型 struct结构体类型名称{成员;};
*通过结构体类型定义结构体变量 struct结构体类型名称变量名称;
3.指针类型
变量类型*变量名称;
指针类型的作用:
1.定义的时候是什么类型将来就只能指向什么类型的数据(保存什么类型的变量地址)
2.指针取值的时候会根据TA的类型取值(是什么类型就取多少个字节)
4.空类型
void
网友评论