[c语言]二级指针有哪些不能说的秘密

一、二级指针相关概念

一个指针变量可以指向整型变量、实型变量、字符类型变量,当然也可以指向指针类型变量。当这种指针变量用于指向指针类型变量时,则称之为指向指针的指针变量。这种双重指针如图1所示。

图1:
在这里插入图片描述
整型变量i的地址是&i,将其值传递给指针变量p1,则p1指向i;同时,将p1的地址&p1传递给p2,则p2指向p1。这里的p2就是前面讲到的指向指针变量的指针变量,即指针的指针。指向指针的指针变量定义如下:

类型标识符 **指针变量名;

例如:

int * *p;

其含义为定义一个指针变量p,它指向另一个指针变量,该指针变量又指向一个基本整型变量。由于指针运算符“*”是自右至左结合,所以上述定义相当于:

int *(*p);

既然知道了如何定义指向指针的指针,那么可以将图1用图2更形象地表示出来。

图2:
在这里插入图片描述

#include<stdio.h>

int main()
{
        int data = 10;
        int *p1 = &data;

        printf("data的地址是:%p,data的内容是:%d\n",&data,data);
        printf("p1保存data的地址是:%p,p1存放的内容是%d\n",p1,*p1);

        int **p2 = &p1;
        printf("p2保存p1的地址是:%p,p2存放的内容是%p\n",p2,*p2);
        printf("**p2=%d\n",**p2);

        int ***p3 = &p2;
        printf("p3保存p2的地址是:%p,p3存放的内容是%p\n",p3,*p3);
        printf("***p3=%d\n",***p3);


        return 0;
}

输出结果:
在这里插入图片描述
p1、p2、p3和data之间的传递过程图:
在这里插入图片描述
多级指针就是层层嵌套的指针,和一级指针类似

二、运用二级指针实现一个小demo

问题:输出二维数组中的任意一个一维数组:

//Test6.c
#include<stdio.h>

void getPos(int data,int (*p)[3],int **pos)
{
        *pos = *(p+data);

}

int main()
{
        int arr[][3]={{1,2,3},{23,4,5},{12,34,54}};
        int iNum,i;
        int *iPos;

        printf("输入0、1或者2:\n");
        scanf("%d",&iNum);

        getPos(iNum,arr,&iPos);
        for(i=0;i<3;i++)
        {
                printf("%d ",*iPos++);

        }
        putchar('\n');
        return 0;
}

输出结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃秃秃秃哇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值