一、指针
指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。 和普通变量一样,使用指针存储变量地址前,必须先声明。
指针声明
cpp
type *var-name;
type:指针的基类型,必须是合法 C++ 数据类型var-name:指针变量名- 声明里的
*代表这是指针,和乘法的星号含义不同
有效的指针声明示例:
cpp
int *ip; /* 一个整型的指针 */
double *dp; /* 一个 double 型的指针 */
float *fp; /* 一个浮点型的指针 */
char *ch; /* 一个字符型的指针 */
知识点:所有指针变量本身存放的都是内存地址(十六进制长数字)。不同类型指针的区别:指针指向的数据类型不同。
解引用
- 普通变量:存放数据
- 指针变量:存放内存地址
- 使用
*p访问指针指向内存的值,这个操作叫做解引用 ,通过*操作指针指向的内存空间。
const 修饰指针(3 类)
- 常量指针 :
const type *p,不能通过指针修改指向的值;指针本身可以修改指向。 - 指针常量 :
type *const p,指针本身的指向不可修改;指向的值可以修改。 - const 常量指针 :
const type *const p,指针指向 和 指向的值都不能修改。
指针算术运算
指针本质是地址数值,可以做算术运算(++、--、加减整数)。
cpp
int *p;
p++;
指针自增 / 自减,移动的单位是指向类型的字节大小,不是简单 + 1。
多级指针(指向指针的指针)
多级间接寻址,指针存放另一个指针的地址。
cpp
int *p;
int **pp; // pp是指向int*类型指针的指针
指针和数组
作用:利用指针访问数组元素
- C++ 规定,数组名就是数组的起始地址
- 数组的指针等价于数组首地址
- 数组名作为函数实参传递,传递的是数组首地址(地址传递)
示例:
cpp
cout << *p << endl;
p++;
指针作为函数参数 & 指针函数
- 指针作函数参数:地址传递,可以在函数内部修改外部实参的值。
- 指针函数:返回指针值的函数。
cpp
// 类型名 * 函数名 (参数列表)
int *a(int x,int y)
{
//
}
二、结构体 struct
C++ 允许用户自定义数据结构,将不同类型的数据组合成一个整体,内部数据相互关联,这种结构称为结构体。
结构体声明格式:
cpp
struct 结构体名
{
成员列表;
};
- 结构体名:结构体类型标记
- 大括号内为结构体成员,成员声明格式:
类型名 成员名; - 成员列表也叫域表,单个成员称为一个域;成员命名规则和普通变量一致。
示例:
cpp
struct student {
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1, student2;
访问成员:普通变量用
.;结构体指针用->
三、共用体 union
共用体是特殊数据类型,同一块内存位置可以存放不同类型的数据 。 共用体可以定义多个成员,但任意时刻,只有一个成员有效。共用体可以高效复用内存空间。
共用体定义格式:
cpp
union [union tag]
{
member definition;
member definition;
...
} [one or more union variables];
对比记忆:结构体成员拥有独立内存,所有成员同时存在;共用体成员共享同一块内存,同一时间只能使用一个成员。
四、枚举 enum
枚举类型 (enumeration) 是 C++ 派生数据类型,是用户自定义的若干枚举常量的集合。
定义格式
cpp
enum <类型名> {<枚举常量表>};
格式说明:
- 关键字
enum:标记后面标识符是枚举类型名。 - 枚举常量表:由枚举常量(枚举成员)组成,本质是整型标识符,代表枚举变量可取的值;多个常量用逗号分隔,常量名必须互不相同。
示例:
cpp
enum color_set1 {RED, BLUE, WHITE, BLACK}; // 定义枚举类型color_set1
enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; // 定义枚举类型week
枚举常量取值规则
编译系统会自动给每个枚举常量分配整型值:
- 默认:序号从 0 开始。
- 手动指定部分常量值:指定值之前的常量按默认规则;指定值之后的常量依次 + 1。
- 枚举常量的整数值允许重复。
枚举变量输入输出
枚举变量本身存储的是整数,一般使用switch语句,把枚举常量转换成字符 / 字符串进行输入输出。 枚举类型的业务处理通常搭配 switch,保证程序可读性与合法性。