二级指针整不明白?

博主最近刚学多级指针,在加上在函数中传递,给我整晕了,借此机会整理并总结一下二级指针在函数传递中的处理方式。

通过一个简单的输出函数来举例:

#include<stdio.h>
void print(int x)//输出函数
{
    printf("%d\n",x);
}

int main()
{
    int a = 3;
    print(a);
    return 0;
}

现在我们用指针实现它:

#include<stdio.h>
void print(int *px)//输出函数
{
    printf("%d\n",*px);
}

int main()
{
    int a = 3;
    int *p = &a;
    print(p);//这里p和&a等价
    return 0;
}

最后使用二级指针实现:

#include<stdio.h>
void print(int **px)//输出函数
{
    printf("%d\n",**px);
}

int main()
{
    int a = 3;
    int *p = &a;
    int **pp = &p;
    print(&p);//这里&p和pp等价
    return 0;
}

以上三种写法输出均为3。

由此我们可以总结出 在涉及指针的传递中最重要的是 搞清楚各个地址,*p是什么,p是什么,&p又是什么。

可以参考下面的表格例子(地址瞎编的):

int i = 8;*pi = &i;**ppi = &pi;

i = 8                    &i = 0xaaa

pi = 0xaaa          &pi = 0xbbb          *pi = 8

ppi = 0xbbb        &ppi = 0xccc        *ppi = 0xaaa        **ppi = 8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值