(十三)指针 -- 1 将地址作为数据值

基本概念

  • 指针(pointer) :是一个数据项, 它的值是其他值在内存中的地址。

在C语言中,指针的主要用途,包括:

(1) 允许以更简洁的方式引用大的数据结构
数据结构总是位于计算机的内存中,因此必然存在地址。
一个内存地址在内部表示为一个整数,因此,利用指针,可以使用地址作为一个完整值的速记符号。
当数据结构本身很大时,该策略能节约大量内存空间。

(2) 使程序的不同部分能共享数据
如将某一个数据值的地址从一个函数传递到另一个函数,这两个函数就能使用同一数据。

(3) 能在程序执行过程中预留新的内存空间
在程序中能使用的内存,可以是通过显式声明分配给变量的内存。
若程序能在运行时获得新的内存空间,并让指针指向这一内存则更为方便。

(4) 可用来记录数据项之间的关系
在高级程序设计应用中,指针被广泛用于构造单个数据值之间的联系。
如,通常在第一个数据的内部表示中包含指向下一个数据项的指针,来说明这两个数据项之间有概念上的顺序关系。



1. 将地址作为数据值

  • 左值(lvalue,发音为ell-value) :在C语言中,任何一个指向能存储数据的内存位置的表达式 。

其中,左值开头的l表示,在C语言中左值可以出现在赋值语句的左边。
如,简单变量就是左值,语句如下:

x = 1.0;

四条原则:
(1) 每个左值都存储在内存中,因此必有地址。
(2) 一旦声明左值,尽管左值的内容可以改变,但它的地址永远不能改变。
(3) 按照所保存的数据类型,不同左值需要不同大小的内存。
(4) 左值的地址本身也是数据,也能在内存进行操作和存储。

其中,第(4)条原则可以更好地讨论指针。


为了更好地进行说明,考虑这样一个声明:

int i ;

该声明为整数i在内存的某处保留了一个存储空间。

例如,如果在运行程序的计算机上保存整数需要四个字节的空间,那么变量i可能会得到从1000~1003的位置。如下图阴影部分所示:

根据第(4)条原则,和变量i相关的地址1000本身也是一个数据值,可以存入内存。
它在内存中的存储方式和其他整型数一样。比如,可以把变量i的地址存入下一个内存字中,即地址1004~1007的字节。

出现在地址1004的值1000可以用来指向存放在阴影部分的变量i的地址。
为了强调诸如位置在1004的地址和位置在1000的变量i之间的关系,常在内存图上画上箭头(如下图所示)。

地址1004里的字只是包含了与数值1000对应的位串。同样的位串作为整数使用还是作为地址使用取决于变量在程序中是怎样声明的。
如果将变量声明为指针,就可以把存放在位置1004的值1000理解成内存中变量i的地址,并使用指针检索或操作i的值。



参考

《C语言的科学和艺术》 —— 13 指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值