指针——个人的一点理解

指针(Pointer)

首先要说指针,就必须要说清楚“变量”这个名词的含义。

变量,就字面意思来说,就是本身可以变化的数据。

往更深层次的说,那变量的本质到底是什么呢?其实,变量本质就是在内存当中某一个进程里面的一个临时存储区域,它主要用来存储计算中产生的一些临时性数据。而每一个变量在创建的时候都会被系统给随机分配一个地址,这个地址是真实的物理内存地址,我们一般都是通过访问这个地址从而获取到这个变量具体的内容。但是,如果在代码中用变量的地址直接去访问内存空间中的数据的话,有可能会访问不到,因此为了避免地址的不确定性,我们引入了“变量名”这个概念,由 变量名-地址表 来保证变量名和变量之间的关系,这样的话,就不会存在前面所说的问题了。

而我们C语言当中学习的指针,说白了其实也就是变量空间的地址。打个比方,有一本书,书上有一张便利贴,便利贴上面记录了书的某一页的页码和行号,这张便利贴其实就可以当作一个指针,我们通过访问便利贴上面的页码和行号,就可以具体的访问到书中的那一页那一行的文字,这是不是很形象呢?

指针,用来存储内存地址的变量,它指向单个对象的地址。

简单举个例子,int *a   这里面的*表示指针变量,a表示指针变量名,int表示这个指针是一个整型的指针。这如果还不明白的话,下面我用一串代码来更加具体的说一下。

#include<stdio.h>
int main(){
    int a=3;    //创建一个名称为a的普通变量,这个变量里面存放数据3
    int b=4;    //创建一个名称为b的普通变量,这个变量里面存放数据4
    int* c;     //创建一个指针变量c,这个指针变量c指向普通变量b
    c=&b;       //这句话的意思是将变量b的地址赋予指针变量c
    int** d;    //创建一个指向指针变量c的指针变量d
    d=&c;
    printf("a的值=%d\n",a);//直接打印a的值,结果为3
    printf("b的值=%d\n",b);//直接打印b的值,结果为4
    printf("a的地址=%d\n",&a);//&是取地址符号,这里打印a的地址,结果为6487580
    printf("b的地址=%d\n",&b);//这里打印b的地址,结果为6487576
    printf("c的地址=%d\n",&c);//这里打印c的地址,结果为6487568
    printf("d的地址=%d\n",&d);//这里打印d的地址,结果为6487560
    printf("c的值=%d\n",c); //c是一个指针变量,它里面存放的是b的地址,所以这里打印的是c所指向 
                            的那个变量的地址,即打印b的地址,结果为6487576
    printf("*c的结果=%d\n",*c);//c本身存放的是b的地址,*c就是根据b的地址去找b,这里打印的是b 
                               的值,结果为4
    printf("d的值=%d\n",d);//d里面存放的是c的地址,这里打印c的地址,结果为6487568
    printf("*d的结果=%d\n",*d); //d里面存放的是c的地址,*d就是根据c的地址去找c,而c里面存放的 
                                是b的地址,所以这里打印b的地址,结果为6487576
    printf("**d的结果=%d\n",**d); //同上,*d表示b的地址,**d就是根据b的地址去找b,这里打印的 
                                 是b的值,结果为4
    printf("%d\n",*&a);//&a是取a的地址,*&a就是根据a的地址去找a,结果为3
    printf("%d\n",&**d);//同上,*d就是c,*c就是b,&b就是取b的地址,结果为6487576
    printf("%d\n",*&**&d); //&d是取d的地址,*&d就是d里面存放的c的地址,**&d就是c里面存放的b 
                           的地址,&**&b就是取c的地址,*&**&b就是c所指的变量b的地址
}

以上就是我对指针的所有了解,初次尝试,有不足支持还望大家能够指出,多谢大家! 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值