《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

原文地址:https://www.cnblogs.com/skylover/p/7050734.html