C语言中的多级指针

多级指针其实就是在一个地址对应的空间里存放着另一个地址,通过地址一次次跳转,最终找到存着真实数据的那个地址,并通过***p3找到了地址a里面的数据——200

指针变量也是一种变量,也会占用存储空间,也可以使用&获取它的地址。C语言不限制指针的级数,每增加一级指针,在定义指针变量时就得增加一个星号*。p1 是一级指针,指向普通类型的数据,定义时有一个*;p2 是二级指针,指向一级指针 p1,定义时有两个*,再定义一个三级指针 p3,让它指向 p2,那么可以这样写:int ***p3 = &p2;

其具体意思如下程序所示

#include <stdio.h>
int main(){
    int a=200;
	int *p = &a;//p中存储的是a的地址,*p=a
	int **p2 = &p;//p2中存储的是p的地址,*p2=p=&a,*(*p2)=*p=a
	int ***p3 = &p2;
	//p3中存储的是p2的地址,*p3=p2=&p,*(*p3)=*p2=p1=&a,*(*(p3)) = *(*p2)=*p=a
	
	printf("a= %d, *p= %d, **p2 = %d, ***p3= %d\n\n",a,*p,**p2,***p3);
	
	printf("*p2=p=&a\n*p2 = %#x, p = %#x,&a = %#x\n\n",*p2,p,&a);//*p2=p=&a
	printf("*p3=p2=&p\n*p3=%#x, p2 = %#x, &p = %#x\n\n",*p3,p2,&p);//*p3=p2=&p
	printf("**p3=*p2=p=&a\n**p3=%#x, p2 = %#x, &p = %#x\n\n",**p3,*p2,p,&a);//**p3=*p2=p=&a
	printf("***p3=a\n***p3 = %d, a = %d\n",***p3,a);//***p3=a
    return 0;
}

输出为:

a= 200, *p= 200, **p2 = 200, ***p3= 200

*p2=p=&a
*p2 = 0xc00320e8, p = 0xc00320e8,&a = 0xc00320e8

*p3=p2=&p
*p3=0xc00320e0, p2 = 0xc00320e0, &p = 0xc00320e0

**p3=*p2=p=&a
**p3=0xc00320e8, p2 = 0xc00320e8, &p = 0xc00320e8

***p3=a
***p3 = 200, a = 200


参考地址:http://c.biancheng.net/view/2016.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值