关于C++中 指针,地址,指针变量 三者之间的区别和联系:

指针是C和C++的重点,也是后面学习数据结构的基础,因此深刻理解指针的概念很重要。但是指针的概念比较抽象,难于理解,而且一些复杂的程序中都是离不开指针的,如果不能理解指针,那么就不能理解较为复杂的程序了,作者结合了自己学习C++的经验,对指针,指针变量,地址作如下阐述。

1.什么是指针:

         程序中最离不开的就是变量,而变量相当于是一个容器,是用来存放数据的,变量是存放在内存中的。在C++ 中定义变量的形式是: 数据类型 + 变量名,这里的变量名实际上是一个符号地址,在程序编译时,操作系统将为每个变量在内存中分配内存,所以每个变量都有一个在内存中的地址,即物理地址,并将变量的符号地址(变量名)和物理地址关联起来,所以,我们在程序中对变量名的操作,编译时编译器都会将变量名转换为变量在内存中的物理地址,从而实现了对内存中只定地址区域的数据的操作,这就是变量的实现原理。变量在内存中的地址又称作指针,我们说“变量的地址” 就等价于 “变量的指针”,但是指针和指针变量是不一样的。

2.指针变量的概念:

        从上面我们可以看到,每个变量都有一个符号地址(变量名)和物理地址(在内存中的位置,又叫做指针)。变量是可以存储数据的,但是指针变量与普通变量不同,它用来存放普通变量的地址,即指针变量是用来存放普通变量的指针。要知道,指针变量也是一个变量,在内存中也是占内存的,只不过它不存放基本类型数据,而是存放其他基本类型变量的地址。既然指针变量也有自己的物理地址,那么指针变量的地址用什么来存储呢?用比该指针类型高一级的指针变量来存放指针变量的地址,如二级指针变量存放一级指针变量的地址,三级指针变量存放二级变量的地址,依次类推。

3.总结:

     牢记三句话:

     指针就是地址,地址就是指针;指针变量是一个变量,它保存了基本类型变量的地址。

     如果指针变量p保存了变量a的地址,那么称作p指向了a,*p 就是变量a。

     如果p是一个指针变量,*p 表示了以 p 的内容为地址的变量,就是p指向的变量。

4.举例如下:

                    int a ;  //定义int类型变量

                    int *p = &a;   //变量 p 是一个 int* 类型的一级指针变量,&是取地址符,p保存了a 的地址

                    cout << *p <<endl; //输出 p 指向变量的值,即输出a的值

    cout <<  p << endl; //输出 p 的值,即输出变量a在内存中的地址

                    int **q;  //定义二级指针变量

                    q = &p; // 二级指针变量q保存了一级指针变量p的地址

                    cout << q <<endl; //输出指针变量p在内存中的地址

    cout <<  *q << endl; //输出q指向变量的值,即变量p的值,即a的地址

                    cout <<  **q << endl; //可以这样理解  cout<<*(*q), 等价于 cout <<*p, 即输出a的值

http://blog.163.com/zzx_1314/blog/static/257343047201601211105684/

猜你喜欢

转载自blog.csdn.net/woainilixuhao/article/details/81784124