c/c++指针以及二级指针的理解
指针即是用来指向变量地址的一种工具,其本质还是一个变量;
指针和普通变量之间的异同;
1.不同之处:
指针使用来存储地址的变量,而普通变量则是用来存储数值的变量,两者在定义的时候计算机都会为其分配内存。
2.相同之处:
两者都是变量都是用来保存值,只不过保存值得类型不同而已。
论证:
int a=5;//表明了a是一个数据类型为in行的变量(非指针)该变量只能够存储整形数据即:1,2,3,4,5等,假设a的内存为&a=008fc30;
int *p=NULL;//表明了p的数据类型是int *型即是一个指针并且该指针初始化为空(指针在定义的时候往往要进行初始化以免在后续操作中将没有初始化的指针进行解引用即*p运算这样会出错),假设p指针的内存为&p=007fc56;
p=&a;//将a的地址赋值给p指针
cout << "a:" << a << endl;
cout << "p:" << p << endl;
输出:
a:5
p:008fc30
两者都是打印输出变量所保存的值而a是一个整形变量则打印输出其值5,p是一个整形指针用来保存地址的变量打印其值得到的是a的地址即008fc30。
紧接着:在定义一个二级指针:
二级指针:二级指针也就是指针的指针说白了就会用来保存一级指针的地址的变量。
一级指针与二级指针区别:一级指针使用来保存普通变量的地址的变量而二级指针则是用来保存一级指针的地址的变量(指针只能存储地址)
int **q=null;//假设q的地址为006fc56
q=&p / /将p的地址保存在一个二级指针q中
cout << "q:" << q << endl;
cout << "p:" << p << endl;
输出结果:
q:007fc56
p:008fc30
两者都是打印输出指针变量的值(地址)。
下面说说指针的解引用(*)
*(指针名):代表取指针所存储的地址所对应的变量的值;
例如:
*q代表了取q中存储的地址(p的地址)所对应的值(p中的值也就是a的地址)。
完整代码:
多级指针原理相同自行体会。
转载请标明原贴出处:https://blog.****.net/zj490044512