详谈指针*/**,引用&
2015-05-20 11:05
113 查看
【指针*与&】
指针和数组有异曲同工之妙,在前面博客有专门解释过,指针声明用*,凡是在声明一个变量前面加上这个符号,就是说明声明的这个变量是一个指针,它是一个地址,比如:
p就是一个指向整型变量的指针,p指向的是整型变量a的地址,而*在使用的时候还有一个别名,解引用,抵消了&引用功能,&在这里是引用a的地址。
在上例中其实就是对a值进行修改,按照注释的理解方式去思考,会觉得指针和引用的关系原来就是相互抵消的过程,*p取得是a的值,p和&a取得都是a的地址。&p注意一下是指针p在内存中的地址,指针p也是要占内存的。
【双重指针**】
双重指针即指针的指针,就是说一个指向指针的指针,定义如下,
两个解引用的使用构成双重指针的声明,y作为一个双指针,初始化时应该是把一个指针的地址赋值给它,x与y之间的关系如下:
1.(*y)得到的是指针x的内存地址;
2.(**y)得到的是指针x的对象,指针x的对象就是a;
3.(*x)得到的是对象a的值;
【测试用例1】
【输出结果】
从输出结果发现,
**y = *x =a =100;
*y = x = &a;
y = &x
符合前面的论述,其次,例子中还有p和y之间的操作,这里就是举一个初始化y的另一种方式。
当函数想要操作的是指针本身时就可以用双指针。
【测试用例2】
输出结果:
改变了x指针的指向,而y也会改变,因为y始终指向的是x。
指针和数组有异曲同工之妙,在前面博客有专门解释过,指针声明用*,凡是在声明一个变量前面加上这个符号,就是说明声明的这个变量是一个指针,它是一个地址,比如:
int a = 2; int *p; p = &a;
p就是一个指向整型变量的指针,p指向的是整型变量a的地址,而*在使用的时候还有一个别名,解引用,抵消了&引用功能,&在这里是引用a的地址。
*p = 1;//其实*p = *(&a) = a可以这么理解
在上例中其实就是对a值进行修改,按照注释的理解方式去思考,会觉得指针和引用的关系原来就是相互抵消的过程,*p取得是a的值,p和&a取得都是a的地址。&p注意一下是指针p在内存中的地址,指针p也是要占内存的。
【双重指针**】
双重指针即指针的指针,就是说一个指向指针的指针,定义如下,
int **y; int a; int *x; x = &a; y = &x;
两个解引用的使用构成双重指针的声明,y作为一个双指针,初始化时应该是把一个指针的地址赋值给它,x与y之间的关系如下:
1.(*y)得到的是指针x的内存地址;
2.(**y)得到的是指针x的对象,指针x的对象就是a;
3.(*x)得到的是对象a的值;
【测试用例1】
#include<stdio.h> void main() { int **y; int *x; int a =100; int *p; x = &a; y = &x; p = *y; printf("a = %d, &a = %d\n", a, &a); printf("x = %d, &x = %d, *x = %d\n",x,&x,*x); printf("y = %d, *y = %d, **y =%d\n",y, *y, **y); }
【输出结果】
从输出结果发现,
**y = *x =a =100;
*y = x = &a;
y = &x
符合前面的论述,其次,例子中还有p和y之间的操作,这里就是举一个初始化y的另一种方式。
当函数想要操作的是指针本身时就可以用双指针。
【测试用例2】
#include<stdio.h> void main() { int **y; int *x; int a[2]={100,103}; int *p; x = &a[0]; y = &x; p = *y; printf("a[0] = %d, &a[0] = %d\n", a[0], &a[0]); printf("x = %d, &x = %d, *x = %d\n",x,&x,*x); printf("y = %d, *y = %d, **y =%d\n",y, *y, **y); x = &a[1]; printf("a[1] = %d, &a[1] = %d\n", a[1], &a[1]); printf("x = %d, &x = %d, *x = %d\n",x,&x,*x); printf("y = %d, *y = %d, **y =%d\n",y, *y, **y); }
输出结果:
改变了x指针的指向,而y也会改变,因为y始终指向的是x。
相关文章推荐
- 关于指针、const、typedef、作用域::、引用&的一些理解
- & 引用形参 与 指针
- 指针(*)和引用(&)的区别
- int *pa(指针)和int *&pa(指针的引用)的区别
- 指针与对指针的引用,(*) VS( *&)
- 【C/C++语法外功】传值&传引用&传指针
- 【C/C++语法外功】传值&传引用&传指针
- 初级篇——指针(*)、取地址(&)、解引用(*)与引用(&)的区别
- 【转载】C ++ 基础 指针 & 引用
- C++&nbsp;引用&nbsp;指针&nbsp;智…
- 深入理解C语言的指针*和引用&
- 成员指针和成员指针逆向引用运算符".*"
- C++中指针和引用(int*、int&、int*&、int&*、int**)
- int *pa(指针)和int *&pa(指针的引用)的区别
- 二叉树创建函数中一定要用指针的引用void createtree(BiTree *&T)或者用指针的指针void createtree(BiTree **T)
- 引用&指针和引用&const的关系
- C/C++指针的指针(**p)和指针的引用(*&)使用案例分析
- 引用&指针
- 指针变量的赋值与引用&&二重指针