// 数组名就是数组的地址, 数组的地址就是首元素的地址
// 指针是专门用于保存地址
// 数据类型 *变量名称;
// 由于数组的首元素的地址就是数组的地址, 所以定义一个指针指向数组其实就是定义一个指针指向数组的首元素, 所以数组的首元素是什么类型, 那么指向数组的指针就是什么类型
// 指针+1, 是加上指针类型所占用的长度
// 因为数组名就是数组的地址, 数组名保存的就是数组的第0个元素的地址,所以我们可以使用指针来保存字符串
// 通过指针保存一个字符串, 其实就是保存的字符串第0个元素的地址
// 通过数组保存字符串和通过指针保存字符串的区别
// 如果通过数组来保存字符串, 那么字符串是一个变量 str 可以修改
// 如果通过指针来保存字符串, 那么字符串是一个常量 str2 不能修该
// 数组保存的字符串存储在内存的栈中, 而通过指针保存的字符串存储在常量区
// 存储在栈中的变量有一个特点, 当作用域结束系统会自动释放该变量
// 存储在常量区中的值有一个特点, 不会被释放, 而且多个相同的值对应的地址相同
保存字符串的两种方式:
char str[] = "lnj";
存储的位置: 栈
特点: 相同的字符串会重复的分配存储空间
字符串可以修改
char *str = "lnj"
存储的位置: 常量区
特点: 相同的字符串不会重复的分配存储空间
字符串不可以修改
// 定义数组的格式: 元素类型 数组名称[元素的个数]
只要是数据类型就具备3个特点
1.可以用来定义变量
2.可以用来作为形参的类型
3.作为返回值
指向函数的指针
指向函数的指针的定义格式
void (funtionP) ();
* : 代表是一个指针
funtionP : 代表指针变量的名称, 区分
(funtionP) : 代表将来指向一个函数
void : 代表将来指向的函数没有返回值
() : 代表将来指向的函数没有参数
结构体基本概念
数组: 是用于保存一组相同类型的数据
结构体: 是用于保存一组不同类型的数据
要想保存人得数据, 就必须先定义变量
数据类型 变量名称;
如何定义一个结构体变量
1.定义结构体类型
2.根据结构体类型, 定义结构体变量
定义结构体类型的格式:
struct 结构体类型名称
{
属性;
};
结构体定义
如何定义指向结构体变量的指针
1.拷贝结构体类型 和 结构体变量名称
2.在类型和名称中间加上一颗心
当指针指向结构体之后如何利用指针访问结构体
结构体变量名称.属性;
(*结构体指针变量名称).属性;
结构体指针变量名称->属性;
枚举
// 枚举就是专门用于表示几种固定类型的取值
// 枚举的本质就是基本数据类型, 就是整形
// 枚举和结构体一样, 要想定义枚举类型变量, 那么必须先定义枚举类型
枚举类型定义的格式
enum 枚举类型名称
{
取值,
};
// 定义枚举变量和定义结构体变量一样, 直接将数据类型拷贝过来, 空格之后写上变量名称即可
结构体与函数