《c++程序设计现代方法》笔记2
数据处理
数组的定义: int my_array[6],表示包含6个整型元素的数组
二维:int box[3][3],
对于一维数组,声明时候不需指定大小,如声明 int sumArray (int values[ ]);
指针是全书的一个重点讲述内容,占据三章的内容(12--14)
指针的声明:<type> *<ptr_name>; type表明了指针所指向的内存类型。
int x=5;
int *p_x = &x;//获得变量的地址,&取地址运算符
//*p_x = 2; //初始化x为2
cout << p_x << endl; //输出内存地址
cout << *p_x << endl; //指向内存,取出里面的值
输出结果如下:00C7F998
5
指针,也是变量,里面存储的是另一个变量的地址,示意图如下。
绝大多数变量容纳的是有用的信息,如图中的5,3,6;很明显,指针的用途只有一个,用来定位另一样东西。指针是间接访问,以区别一般的直接访问。
指针像其他任何变量一样有一个可以访问的地址,那么就有指向指针的指针。
运行时的内存布局:
一个运行的程序在内存中表示为这四个空间区域。全局、堆与栈更像是代码区的分解,图片文字解释已经很清楚了。
“在使用的内存,称为栈;未被分配的内存区域称为堆。”,此话,结合此图更好理解。
栈,是一种数据结构。栈,其实反映的是函数的调用过程,就是栈空间的操作过程。
使用指针,便可以访问这块未使用的内存。内存为稀缺资源,当不使用时候,应该释放回去。
不要引用未被赋值的指针。如果某个指针暂且不用的话,可以给它赋一个空指针指向NULL,表示不指向任何地址。头文件<cstddef>用于NULL。
在引用指针指向的内容时,先检查指针的值是否为NULL很有必要,这样可确保指针指向的空间是有效的。
动态分配:在程序运行时候,请求所需要的内存大小。强调灵活性
int *p_int = new int; new是关键字,用来将未分配的内存初始化分配给指针。
delete p_int 指针释放,
申请一个动态的整型变量:
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int *p; 7 p = new int; 8 if (!p) //如果空间申请失败 9 { 10 cout << "allocation failure" << endl; 11 return 1; 12 } 13 *p = 20; 14 cout << *p; 15 delete p; //指针释放 16 17 cin.get(); 18 return 0; 19 }
看如下代码:最终x=25;p_p_int=27;p_int=3.注意区分加****与不加***的区别。
主要涉及到变量值与地址的问题。
1 int x = 0;
2 int *p_int = &x; //声明指针的指向
3 int **p_p_int = &p_int; //声明指针的指向
4 *p_int = 12; //对x赋值,x=12
5 **p_p_int = 25; //相当于*p_int=25,对x赋值,x=25
6 p_int = 12; //
7 *p_p_int = 3; //p_int=3
8 p_p_int = 27; //
数据结构:是内存中组织数据的一种方式。了解了更多数据结构后,你会逐渐学会从数据角度思考程序,学会思考如何组织数据。
递归,是重复的函数调用。与循环相类似,但功能更强大。
1 //一个递归例子 2 3 #include<iostream> 4 using namespace std; 5 6 void printNum(int num) 7 { 8 cout << num; 9 if (num < 9) 10 { 11 printNum(num + 1); 12 } 13 cout << num; 14 } 15 int main() 16 { 17 printNum(1); 18 19 cin.get(); 20 return 0; 21 } 22 //*************************************************** 23 24 //***************************************************
输出结果:123456789987654321