您的位置:首页 > 编程语言 > C语言/C++

c++系统学习笔记

2017-02-15 14:17 155 查看
教程 范磊制作,感谢老师。

第八天笔记

1.指针是用来存储变量地址的

2.地址初始化 int *p = 0;  等同于 int *p; p = 0;

3.double a = 3.14; double *p = &a; p++ 地址加了八个字节

4.使用* 访问指针指向的值

***注意5.容易混淆的概念:

指针地址,指针保存的地址,和该地址的值

相对应的

&p ,p ,*p

6.为什么使用指针

(1)处理堆中存放的大型数据

(2)快速访问类的成员数据和函数

(3)以别名的方式向函数传递参数

7.堆栈

(1)栈区:由编译器自动分配并且释放,该区域一般存放函数的参数值,局部变量的值。

(2)堆区:一般由程序员分配释放,若程序员不释放,程序结束时,可能由操作系统释放。

(3)寄存器区:用来保存栈顶指针和指令指针

(4)全局区(静态区 static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量是放在一块区域,未初始化的全局变量和静态变量放在相邻的另外一块区域,程序结束后由系统释放。

(5)文字常量区:常量字符串就是放在这里的,程序结束后由系统释放。

(6)代码区:存放二进制代码

8.进栈顺序



9.出栈顺序



10.用指针删除堆中空间,delete p; 在没有足够的内存空间时,new 有可能返回的是0 .

11.内存泄漏

假如没有删除一个指针就对其重新赋值

12堆中创建对象

Human *p; p = new Human; 对象的大小由它的成员变量决定,加入有两个int类型的成员变量则它的大小是 2 * 4 = 8个字节

也可以合并为一句 Human *p = new Human;

13访问堆中成员数据和函数

Human a; a.data();

Human *p = new Human;

p->data();

14.对象在栈和堆中的不同

Human a;在栈中 ,会在超出作用域时 ,比如遇到main的右大括号时 ,系统自动调用析构函数,释放该对象占用的空间。

Human *p = new Human;在堆中,需要程序员自己释放内存,否则需要等到程序结束后才能回收 

15.this指针

16.指针的常见错误

删除一个指针后一定要将该指针设置为空,这是因为删除该指针只会删除它指向的内存空间,不会删除指针,指针还存在,而且任然指向原来的内存空间,此时如果你

再次尝试使用该指针,程序就会出错。

17.指针的加减运算

int *p = new int(12); p++,p的地址加四个字节

18常量指针

A*const p

该指针不 可改变,但是指向的目标可改变

const A* p

相反该指针可改变,但是他指向的内容不可改变

const A* const p

指向常量的常指针

都不能改变

第九天笔记

1.按值传递

按值传递会拷贝副本 按值返回时也要建立一个副本,副本对象存储在栈中

如下图



2.按址传递



它的打印



修正后的按址传递和返回



3.使用const 指针来传递对象

const A* const func(const A* const a)

{

return a;

}

4.按别名来传递对象

引用是对象的别名 ,此处的参数是对象别名,A&指别名 ,类型也是A,不是指A 的地址

副本对象存储在栈中

A& func(A& a)

{

return a;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android