c指针,指向指针的指针理解(实例)

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;
}

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值