c和指针详解 深入浅出

一、变量存储

看下列一个简单的代码,变量a被赋值于6,它是如何在内存中是如何对应的呢?我们先打印出a变量的地址。

int main(){
    int a = 6;
    printf("%d\n",&a); //输出0x61FE1C
}

为了方面观众老爷观看,我画了个内存结构图,一目了然。
在这里插入图片描述

从这张图中,你不难看出,只有6这个值在内存中真正的占用了内存空间,而这个地址值,他并不占用内存空间,他只是用来标识6这个值在内存中的位置。

二、一级指针

我们来修改一下代码。创建了一个指向整形的指针p,指向a的地址,打印出指针的地址。

int main(){
    int a = 6;
    printf("%d\n",&a);
    // int* p = &a; 两种写法是一样的
    int *p = &a;
    printf("%d\n",&p); // 输出0x61FE10 
}

看内存结构图。欸,我们仔细观察,p指针的内容竟然存着变量a的地址,这样我们就可以通过*间接访问地址修饰符来操作0x61FE1C地址的值 也就是6
在这里插入图片描述
举一反三,我们要是知道一个变量的地址,我们直接去操作地址,看代码。

//地址需要强转为指针,再通过*符号访问地址,输出6
printf("%d\n",*((int *)0x61FE1C));

三、二级指针

二级指针其实也类似于一级指针。不多bibi,我们上代码。

int main(){
    int a = 6;
    int *p = &a;
    int **ptr = &p;
    printf("%d\n",&ptr); //输出0x61FE08
}

我们看内存结构图,看看是不是你想的那样┑( ̄Д  ̄)┍
在这里插入图片描述

你可以看到ptr指针的内容存放的是指针p的地址,
通过访问ptr指针得到的是p指针,
访问p指针得到的是a变量。

是不是有种无限套娃的感觉( ̄▽ ̄)"。
如果你理解了这种关系,多少级指针都是一样的哦。
要想在函数调用中,改变指针的指向,二级指针很常用。篇幅有限,大家可自行尝试。

作者水平有限,文章中若存在问题还请指出,最后,如果文章对你有帮助,不妨点赞对博主支持一下把。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值