指针
指针变量
*存放 目标变量地址 的变量
初始化:
目标变量类型名 | 星号+指针变量名1 | 赋值符 | 取地址符+目标变量名 |
---|---|---|---|
int | *p | = | &a12 |
对*p的操作等同于对a1的操作
对p的操作只是对 **存放地址变量的值(也就是a1的地址)**的操作
不是对a1值的操作
注意:
- 对p进行算数运算并不等同于变量的算数运算。其运算结果取决于目的变量的类型。
例如,a2是short 为短整型,大小为2字节。所以short *p2 = &a2,对p2+1其实是p2的值+2
同样,int型大小为四个字节,+1则是变量的值+4
- 目标变量不同的指针不能相互赋值
- 指针的赋值必须是地址
补课:枚举类型
定义:自定义一个数据类型,其中,这个数据类型的值是固定的,可以枚举完毕。
有了这个类型之后,可以用这个类型来初始化变量
格式:
- 定义类型
关键字 | 数据类型名 | 中括号 | 类型值/枚举元素(这里看作常量) | 中括号 |
---|---|---|---|---|
enum | weekday | { | sun,mon,tue,wed,thu,fri,sat | }; |
- 定义变量
数据类型名 | 变量名 | 赋值符 | 类型值3 |
---|---|---|---|
weekday | day1 | = | mon; |
注意:
- 枚举类型只能进行关系运算
- 枚举类型值具有默认值:0,1,2,3…
- 如果要对枚举类型值进行改变只能在定义类型的时候进行赋值改变
如:enum weekday {sun = 7,mon = 2,tue,wed,thu,fri,sat};但是我不知道这么干有什么意义
- 枚举类型的默认值是int,所以存储的时候也是按照int进行存储的,因此给其中每个变量分配的是4个字节的存储空间。
结构类型(结构体)
格式:
- 定义类型:
关键字 | 结构体类型名 | 中括号 | 数据类型n 成员名n; | 中括号 | 分号 |
---|---|---|---|---|---|
struct | student | { | long num;//学号 | ||
char name;//姓名 | |||||
char sex;//性别 | |||||
int age;//年龄 | |||||
float score;//分数 | } | ; |
- 定义变量:
结构体类型名 | 变量名 | 分号 |
---|---|---|
student | s1 | ; |
注意:
-
student是类型,s1是这种类型的变量
-
结构类型中变量的访问需要通过 . 来访问。
例如:给s1中的num赋值:
s1.num = 162202203;
- 变量初始化:
**1.**可以直接在定义变量的时候初始化
结构体类型名 | 变量名 | 中括号 | 值 | 中括号 | 分号 |
---|---|---|---|---|---|
student | s2 | { | 162202203,“Lily”,“girl”,20,100.0 | } | ; |
**2.**也可以定义变量之后,用 . 运算符挨个访问赋值
student s3;
s3.num = 162202203;
s3.name = "Lily";
注意:
- 同一结构类型中,类型相同的变量之间可以赋值。
- 不同结构类型的变量,哪怕类型相同,也不能进行相互赋值。