44.函数的分文件编写
作用:让代码结构更清晰
步骤:
1.创建后缀名为.h的头文件
2.创建后缀名为.cpp的源文件
3.在头文件中写函数的声明
4.在源文件中写函数的定义
45.指针——指针所占内存空间
作用:可以通过指针间接访问内存
内存编号是从0开始记录的,一般用16进制数字表示;
可以利用指针变量保存地址
1)定义一个指针
语法:数据类型 * 指针变量名;
2)使用指针
可以通过解引用的方法来找到指针指向的内存
指针前加一个*代表解引用,找到指针指向的内存中的数据
46.指针——指针所占内存空间
在Visual Studio里,默认是X86,也就是32位系统,Clion则根据个人电脑配置不同而不同
47.指针——空指针
空指针:指针变量指向编号为0的内存空间
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的
0-255之间的内存编号是系统占用的,因此不可以访问
48.指针——野指针
野指针:指针变量指向非法的内存空间
eg:
int * p = (int * )0x1100;
空指针和野指针都不是我们申请的空间,因此不要访问
49.const修饰指针
1)const修饰指针 常量指针
特点:在定义指针时,数据类型前加const修饰,指针指向可以被修改,但是指针指向的值不可以修改
2)const修饰常量 指针常量
特点:在定义指针时在指针名前加const,指针的指向不可以改,指针指向的值可以改
3)const既修饰指针,又修饰常量
特点:const 数据类型 * const 指针名,指针的指向和指针指向的值都不可以改
如何记忆:const为常量的意思,*为指针的意思,const *为常量指针,*const为指针常量
const p,const修饰的是p,所以就不能修改p(指针指向);const int * p,const紧跟的是*,所以此时const修饰指针,*p不能被修改(指针指向的值)
50.指针——指针和数组
利用指针访问数组中的元素
注意:此处如果p++则意思指针指向数组中下一元素的地址(向右移动三四个字节)
51.指针——指针和函数
地址传递:
如果是地址传递,可以间接改变实参的数据
52.demo——指针、数组、函数
封装一个函数,利用冒泡排序,实现对整形数组的生序排序
例如int arr[10] = {4,3,6,9,1,2,10,8,7,5}、
53.结构体——结构体定义和使用
创建时struct可省略,定义时不可
运行结果
54.结构体——结构体数组
55.结构体——结构体指针
要通过结构体指针,访问结构体中的数据,需要借用 ->
56.结构体——结构体嵌套
eg:每个老师辅导一个学生,一个老师的结构体中记录一个学生的结构体
struct student{
std::string name;
int age;
int score;
};
struct teacher{
int id;
std::string name;
int age;
struct student stu;
};
int main() {
teacher t;
t.name = "老王";
t.age =35;
t.id =10000;
t.stu.age =18;
t.stu.name = "小王";
t.stu.score =720;
std::cout<<"老师的名字"<<t.name<<"老师的年龄"<<t.age<<"老师的编号"<<t.id<<
"老师的学生的名字"<<t.stu.name<<"老师的学生的年龄"<<t.stu.age<<"老师的学生的分数"<<t.stu.score
<<std::endl;
}
57.结构体——结构体做函数参数
地址传递会改变实参的值,值传递不会。(详情见指针那一章)