多级指针(以二级为示例)

一级指针:*p
二级指针:**p
三级指针:***p
多级指针以此类推。。。

二级指针:就是一个指向一级指针的指针

示例代码:
#include<stdio.h>
//多级指针
int main()
{
int data=10;
int *p;
p=&data;

int **p2;
p2=&p;

printf("data的地址为:%p, 值为:%d\n",&data,data);
printf("p存放data的地址为:%p\n",p);
printf("p的地址为:%p\n",&p);
printf("*p=%d\n",*p);
printf("p2存放p的地址为:%p\n",p2);
printf("*p2为:%p\n",*p2);
printf("**p2为:%d\n",**p2);



return 0;

}

运行结果
在这里插入图片描述

如示例代码所示:
定义了一个一级指针p指向变量data,又定义了一个二级指针p2指向一级指针p,由运行结果可知,一级指针p中存放的是变量data的地址FE14,*p可以取到data的值,二级指针p2中存放的是一级指针p的地址FE08,*p2可以取到p中存放的内容即data的地址FE14,**p2则可以取到data的值

二级指针编程小实例
代码:
#include<stdio.h>
//多级指针

void getPosByStuNum(int stuNum,int (*pscore)[4],int **p2)
{

*p2=(int *)(pscore+stuNum);//*p表示取到main函数中一级指针的地址

}
int main()
{
int scores[3][4]={
{77,88,45,67},
{45,59,78,56},
{56,78,99,87}};

int *p;
int stuNum;

puts("请输入你想查询成绩的学生学号:(0、1、2)");
scanf("%d",&stuNum);

getPosByStuNum(stuNum,scores,&p);

for(int i=0;i<4;i++)
{
	printf("%d ",*p++);
	
}

return 0;

}

运行结果
在这里插入图片描述

如代码所示:在主函数中定义了一个一级指针p,将它作为参数赋给函数getPosByStuNum中的二级指针p2,此时的p2指向一级指针p,然后*p2通过函数体中的逻辑得到二维数组scores的列地址,此时主函数中的一级指针p即可通过地址偏移取出二维数组中每个一维数组的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值