1.定义
定义时使用 int *p=&k,代表int *类型的p指针指向k;
定义后改变指针指向a,则用p=&a,而不能用*p=&a,*p实际是int型变量,而&a是 int*型
int k=3,*p=&k;
int a=1;
p=&a;
2.指向指针的指针
改变p的指向与改变*r的指向是作用相同的
改变指针指向不会改变原来指针所指向的变量的值,本例中仍有k=3
打印结果如下
*p=1 *p=2 k=3请按任意键继续. . .
图为引用博客园
int *p=&a[0];
int **point=&p;
**point和a[0]是等价的,前者可以写成*p,*p是取p中存放的地址(0025F760)中的值,即地址0025F760中存放的值1。由上可以得出*point等于p, **point 等于 a[0]。通过上图可以清晰的对付诸如*point++等问题。
int k=3,*p=&k,**r=&p;//p中存储k的地址即*p=k;p=ad(k),
//r中存储p的地址即**r=k;*r=ad(p),r=ad(k)
int a=1,b=2;
p=&a;
printf("*p=%d",*p);
*r=&b;
printf("*p=%d",*p);
printf("k=%d",k);
3.函数调用实例
// text.cpp : 定义控制台应用程序的入口点。
//指针,指向指针的指针
#include "stdafx.h"
#include "stdio.h"
void zhizhen(int *a)//int *a=p,a与p指向同一个k变量
{
printf("zhixingqian a=%d\n",*a);
int b=2;
a=&b;
printf("zhixinghou a=%d\n",*a);
}
void zhizhen_zhizhen(int **a)//int **a=&p;a指向指针p
{
printf("zhixingqian **a=%d\n",**a);
int b=2,*d=&b;
*a=d;//*a即p指向新的地址
printf("zhixinghou **a=%d\n",**a);
}
int main(void)
{
int k=3,*p=&k,**r=&p;//p中存储k的地址即*p=k;p=ad(k),
//r中存储p的地址即**r=k;*r=ad(p),r=ad(k)
zhizhen(p);
printf("k=%d,*p=%d,**r=%d\n",k,*p,**r);
zhizhen_zhizhen(r);
printf("k=%d,*p=%d,**r=%d\n",k,*p,**r);
return 0;
}