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;
}
第八天笔记
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;
}
相关文章推荐
- 开始系统的学习C++ 之 C++学习笔记<一>
- c++学习笔记--改变系统时间
- C/C++学习笔记26:(一)C文件系统概述
- 商场收银系统之策略模式学习笔记[C++版]
- C/C++学习笔记27:(二)C文件系统操作
- C++学习笔记-2 C++类型系统
- 【C++学习笔记】返回桌面等特系统殊路径地址 —> SHGetSpecialFolderPath
- c++学习笔记(图书馆易简系统)
- c++技巧学习笔记(1)
- C++ Primer 学习笔记关于练习题6.12
- 学习笔记-Linux 系统管理学习笔记(一)
- c++入门学习笔记指针篇
- c++入门学习笔记--类和对象
- 高质量C++/C编程指南学习笔记(上)
- wmi 学习笔记之获得系统版本
- unix_c++学习笔记1
- c++学习笔记
- C++学习笔记--内存管理
- 从今天开始每天写C++或其他学习的知识的笔记,以激励自己
- C++学习笔记(1)——基类、派生类的对象空间