本博文的目的:弄清楚二级指针=====》一级指针=======》一级指针======》普通变量 的关系(关于这方面的内容,花10分钟理解这篇博客就够,不需要找其他的)
摘自百度百科(作宏观了解用):
指针的表现形式是地址,核心是指向关系指针,运算符“*”的作用是按照指向关系访问所指向的对象.如果存在A指向B的指向关系,则A是B的地址,“*A”表示通过这个指向关系间接访问B.如果B的值也是一个指针,它指向C,则B是C的地址,“*B”表示间接访问C如果C是整型、实型或者结构体等类型的变量或者是存放这些类型的数据的数组元素,则B(即C的地址)是普通的指针,称为一级指针,用于存放一级指针的变量称为一级指针变量。
A(即B的地址)是指向指针的指针,称为二级指针,用于存放二级指针的变量称为二级指针变量.根据B的不同情况,二级指针又分为指向指针变量的指针和指向数组的指针.
细节解答:
int a=1;:int说明a是整型,在内存中占4个字节,&a表示值1的地址,a表示该变量的值1。
int *p1 = &a;:int *说明p1为一级指针类型,在内存中占4个字节,&p1表示该指针的地址,p1表示该指针的值(&a),*p1表示变量a的值。无论是多少级指针,指针的内容都是内存中的地址。例如:int *p1 = 0;p指针的值!= 常数0,而是 = 内存地址0x00000000。
int *p2 = p1;:int *说明p2为一级指针类型,在内存中占4个字节,&p2表示该指针的地址,p2表示该指针的值(p1),*p1表示p1的值。
int **q= &p1;:int **说明q为二级指针类型,在内存中占4个字节,&q表示该指针的地址,q表示该指针的值(&p1),*q表示指针p1的值(p1、&a),**q表示变量a的值(1)。
点操作符与箭头操作符的区别?
答:string*p;
*p.empty();
p->empty();
指针初始化:
1、每个指针最好初始化;
2、如果没有现成的值,初始化为NULL或0;
千万不要返回局部对象的引用 ;千万不要返回指向局部对象的指针。