1、值传递
(1)所谓值传递,就是函数调用时实参将数值传入给形参。
(2)值传递时,如果形参发生改变,并不会影响实参,即值传递时,形参是修饰不了形参的。
2、指针:
(1)作用:可以通过指针间接访问内存。
(2)可以通过解引用的方式来找到指针指向的内存。
(3)指针前加 * 代表解引用,可以找到指针指向的内存中的数据。
(4)在32位操作系统下,指针是占4个字节空间大小,与数据类型无关;
在64位操作系统下,指针是占8个字节空间大小。
3、空指针和野指针
(1)空指针:指针变量指向内存中编号为0的空间。
(2)用途:初始化指针变量。
(3)空指针指向的内存是不可以访问的。
4、野指针:指针变量指向非法的内存空间。
5、const修饰指针:
const修饰指针有三种情况:
(1)const修饰指针: 常量指针
const int * p;(特点:指针的指向可以修改,但是指针指向的值不可以修改。)
(2)const修饰常量: 指针常量
int * const p;(特点:指针的指向不可以修改,但是指针指向的值可以修改。)
(3)const即修饰指针,又修饰常量。
const int * const p;(特点:指针的指向不可以修改,指针指向的值也不可以修改。)
记忆技巧:看const右侧紧跟着的是指针还是常量,是指针就只常量指针,是常量就是指针常量。
6、指针和数组
作用:利用指针访问数组中的元素。
7、指针和函数
作用:利用指针作函数参数,可以修改实参的值。
地址传递:可以修改实参的值。
8、结构体:
(1)概念:结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。
9、结构体数组:
(1)作用:将自定义的结构体放入到数组中方便维护。
10、结构体指针:
(1)作用:通过指针访问结构体中的成员。
(2)利用操作符 -> 可以通过结构体指针访问结构体属性(即结构体中的成员)。
11、结构体嵌套结构体
(1)作用:结构体中的成员可以使另一个结构体
12、结构体做函数参数
(1)作用:将结构体作为参数向函数中传递。
(2)传递方式有两种:值传递、地址传递。
13、结构体中的const使用场景:
作用:用const来防止误操作。
如:将函数中的形参改为指针,可以减少内存空间,而且不会复制新的副本出来。
14、内存分区模型:
C++程序在执行时,将内存大方向分为4个区域:
(1)代码区:存放函数的二进制代码,由操作系统进行管理的。
(2)全局区:存放全局变量和静态变量以及常量。
(3)栈区:由编译器自动分配释放,存放函数的参数值,局部变量等。
注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动回收。
(4)堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。
注:在C++中主要利用new在堆区中开辟内存。
注意:
内存四区的意义:不同区域存放的数据,赋予不同的声明周期,给我们更大的灵活编程。
总结:
(1)C++中在程序运行前分为全局区和代码区。
(2)代码区特点是共享和只读。
(3)全局区中存放全局变量、静态变量、常量。
(4)常量区中存放const修饰的全局常量和字符串常量。
15、new操作符
(1)C++中利用new操作符在堆区开辟数据。
(2)堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符delete。
(3)语法: new 数据类型
注:利用new创建的数据,会返回该数据对应的类型的指针。
(4)释放堆区数组,释放数组的时候,要加[ ]才可以。 如:delete [ ] arr。