标签:
指针就是地址,指针变量是保存指针(地址)的变量,整形变量就是保存整形的变量,我的理解就是保存地址的变量叫指针,地址就叫地址:
1 int a = 0; 2 3 int *p = &a; 4 5 printf("%d\n",*p); 6 printf("%p\n",p); 7 printf("%p\n",&p);
1 //打印结果 2 0 3 0x7fff5fbff84c 4 0x7fff5fbff840 5 0x7fff5fbff850 6 Program ended with exit code: 0
&取地址符,可以获得右边变量的地址;
很多初学者都会问这里int *p = &a,不是把a的地址赋值给了*p吗,为什么*p 打印的不是a的地址,而是a的值
我的理解是 int *p 只是一种声明指针的语法,实际上p才是我们定义的指针变量
二级指针就是<存放指针的地址的指针>,WTF!我当时就懵了
先上代码和图:
int a = 10086; int *p = &a; int **p1 = &p; printf("%d\n",a); printf("%p\n",p); printf("%p\n",&p); printf("\n我是二级指针:\n"); printf("%d\n",**p1); printf("%p\n",*p1); printf("%p\n",p1);
printf("别看哥是二级指针,哥也是有地址的人>>%p\n",&p1);
//打印结果 10086 0x7fff5fbff84c 0x7fff5fbff840 我是二级指针: 10086 0x7fff5fbff84c 0x7fff5fbff840
0x7fff5fbff838 //看到没
Program ended with exit code: 0
为什么*p1会是a的地址,**p1是a的值,先看图你会发现一定规律的
搞清楚*号有什么用10086级指针都不怕
int **p1 = &p;可以把 int ** 理解成类型告诉编译器我要定义几级指针
int **p1 = &p; typedef int** twoP; twoP p2 = &p; //英语初中毕业,再问自杀
...三级指针可以存放二级指针的地址,二级指针可以存放一级指针的地址,一级指针可以存放一个值类型的地址
假如用一个一级指针去保存一级指针的地址,编译器会警告并提示用二级指针啊
标签:
原文地址:http://www.cnblogs.com/dengchen/p/5014861.html