您的位置:首页 > 编程语言 > C语言/C++

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

2013-07-10 19:03 302 查看
初学者可能觉得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号东区:沁苑学生宿舍

我的住址 = 空;

为什么会这样类比?

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

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

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

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

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

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

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

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

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

这个例子仅仅是为了表明“指针”的存在形式。实际上,程序中指针远比现实中要复杂,通过指针可以修改它指向的值,而且指针访问前需要检查非空性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: