C语言 变量与指针 形象化解释

初学者可能觉得C语言指针难以理解,而指针的确是C的精华所在,所以必须弄清它的本质

我一直喜欢把程序设计抽象化的定义具体类比到实例来理解,这样更容易解释和说明,别人也容易听懂

这次先拿指针与引用开刀吧!我们把变量具体化成生活中的地址来解释

首先来个声明:

int stuAddr = 5;

int &hustStuAddr = stuAddr;

printf("%s",&stuAddr); // 0x444ABCD

int *myAddr ;

myAddr = &stuAddr;

printf("%s:%d",myAddr,*myAddr); // 0x4444ABCD:5

myAddr = NULL;

这段对一般人应该不难理解,而我想说的是把它与下面程序一一对应起来看(不妨假设华科只有沁苑学生宿舍,且不会变动)

地址 学生住址 = “沁苑学生宿舍";

地址别名 华科学生住址 = 学生住址;

打印 学生住址 实际位置 // 湖北省武汉市珞瑜路1037号东区

地址指针 我的住址;

我的住址 = &学生住址;

打印 我的住址:我的住址名称 // 湖北省武汉市珞瑜路1037号东区:沁苑学生宿舍

我的住址 = 空;

为什么会这样类比?

变量(即地址)是真实存在的,而指针(即我的住址)是抽象化的概念,是一种映射绑定关系,必须绑定变量才有意义

在声明一个变量后,它的地址就被分配和固定了,(一个小区在建立的时候,实际物理地址也是确定无法更改的)直到它被销毁

当变量的值改变,它的地址是不会变的。(或许若干年后“沁苑学生宿舍”改成了“计算机学生宿舍”,而学生还是住在固定的位置

在程序体内,我们可以用变量名称访问值,但是在其他程序中,只能通过地址访问其值

在校内,我们可以直接用学生宿舍这一名称,但是对外面的人来说,必须告诉他们实际物理地址来找到沁苑

这个例子也很好的阐释了指针和引用的差别

引用即“别名”,对引用的操作实际是对本身的操作,并且引用必须绑定在存在的类型上(华科大不能没有学生宿舍吧!)

当需要用可改变对象的类型时,应当用指针,如上面的“我的住址”,单一指向对象则用引用,如“华科学生住址”(学校多投点钱修新宿舍吧……)

 指针可以改变,可以为空,而引用不行(当我们毕业离校,“我的住址”也会变,甚至无家可归,而“华科学生住址”这个名称实际地址是不会变化的)

 

这个例子仅仅是为了表明“指针”的存在形式。实际上,程序中指针远比现实中要复杂,通过指针可以修改它指向的值,而且指针访问前需要检查非空性

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值