C语言中指针的理解

本文详细介绍了C语言中的指针概念,从普通变量开始,逐步解析一级指针和二级指针的工作原理,通过示例代码和内存示意图帮助读者理解指针存储和访问的本质,旨在深化对C语言指针,特别是二级指针的理解,为阅读复杂如Linux内核代码打下基础。
摘要由CSDN通过智能技术生成

一. C语言指针介绍

        C语言指针是C语言里面非常让人头痛的存在,每次看到指针的时候,尤其是二级指针的时候,都想躲得远远的,导致对代码的理解非常的浅,无法真正理解代码设计者的意图。特别是Linux内核代码,结构体指针,函数指针比比皆是,如果对指针的本质没有深刻的理解,一定会被内核的汪洋大海中淹没,导致每次都是浅尝辄止,败兴而归。本文通过对指针的介绍,也让自己加深对指针的理解。

二. C语言指针的讲解

1. 从普通变量说起

        先从一个简单的例子说起,代码如下:

int a = 12;

对于上述代码的理解:

        机器在内存的某个地址开始开辟了4字节的空间,并且把数字12存储到这4字节的空间中。

示意图如下所示:

2. 一级指针

        给出一个一级指针变量定义,代码如下:

int *b = &a;

对于上述代码的理解:

        step 1 :机器在内存的某个地址开始开辟了4字节的空间 (指针的存储空间为4字节)。

        step 2 :取得a变量的地址 (存储数字12的地址)。

        step 3 :将step 2取得的地址的数值,存入到step 1所开辟的4字节空间中。

示意图如下所示:

一级指针理解:

        我们在访问b这个变量的时候我们在访问什么呢?例如:printf("b = 0x%x\n", b);               

        其实我们是在访问step 1中开辟的4字节内存空间中的内容,而不是这4字节的起始地址。只是这个内容表示的是内存的某个地址的数值。

3. 二级指针

        再给出一个二级指针的定义,代码如下:

int **c = &b;

对于上述代码理解:

        step 1 :机器在内存的某个地址开始开辟了4字节的空间 (指针的存储空间为4字节)。

        step 2 :取得存储b变量内容的地址。

        step 3 :将step 2得到的地址存入到step 1中开辟的4字节内存中

示意图如下所示:

二级指针理解:

        我们在访问c这个变量的时候我们在访问什么呢?例如:printf("c = 0x%x\n", c);

        其实我们是在访问step 1中开辟的4字节内存空间中的内容,只是这个内容表示的是内存的某个地址的数值,而这个地址中存放的还是一个地址的数值。

三. 总结

        1. 看到指针变量,首先就想到内存需要给这个变量分配一块空间,访问变量名就可以获取这块空间的内容。

        2. 不管一级指针,二级指针,甚至三级指针,其实本质上都是一样的,都是内存的某个地址开始的空间(指针是4字节),存储着一个值,这个值代表内存的某个地址,区别在于程序需要通过几次取地址内容获取到最终的值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值