C语言指针再议

2019-08-08 06:23刘变莲
电脑知识与技术 2019年18期
关键词:指针C语言内存

刘变莲

摘要:文章再次阐述指针在C语言程序设计中的应用。主要讲述指针的基本概念和基本语法,同时用例子说明指针用在什么地方,及有什么非用不可的理由。最后总结了指针的类型。一句话就是指针可以在抽象层访问内存单元。最终就是间接使用另一个对象。因为不能直接使用它。指針的使用不能出现空指针或没有指向对象,就用指针,这是非常危险的。指针可以指向变量,也可以指向函数,也可以指向数组,甚至可以指向指针。

关键词:C语言;间接访问;指针;内存

中图分类号:TP311      文献标识码:A

文章编号:1009-3044(2019)18-0265-01

接下来执行程序的过程就是从内存单元取指令代码和数据到CPU中,分析指令、执行指令的过程。也就是程序的执行,每个时刻都在和内存单元打交道,不是取指令就是取数据或者把结果数据存储到内存单元中。输入、输出数据也要和内存单元打交道。

1 基本概念及基本语法

从图1内存结构知道,访问内存单元,需要给出相应的地址才能读写其中的数据或代码。所以地址就是读写内存单元的关键信息。C语言的指针即是内存单元的地址编号。

也可以借指针访问已经存在的对象,方法是获取对象的地址即可。C语言的指针即是提供了访问已经存在对象的第二种手段或方法。见图2所示。

2 指针能干什么

用指针间接访问变量;同时也可以提高访问速度;同时实现动态内存分配及链式存储。

机器语言在机器层工作,和内存单元及内存单元的地址打交道。

高级语言编程在抽象层上设计程序,和变量名、数组名、函数名等一堆名字打交道。编译器在编译程序时,其中的变量、函数等对象都要分配内存,所以,程序一旦运行时,直接对应的是内存单元及地址,事实上这些高级语言程序中的名字在运行阶段就是指代某内存单元。C语言的指针,就是对底层内存单元的操作,也可以提到抽象层做。

为什么用指针解决问题,就是使用它的间接访问特性,比如,函数之间是不能共享数据的,但是,有了指针的助力,就可以间接使用函数外的数据,只要把数据的地址传到函数中即可。为了既共享数据同时还要保护数据,可以使用常指针类型就可以。也可以把函数外的第二个函数传递到函数中来,借函数的指针作函数的形参就可以实现。

指针的应用可以让设计者在抽象层和内存打交道,更直接。能解决一些效率及直接访问无法解决的问题。如函数间共享数据、函数返回值不能是一个值以上等问题。静态数组定义时不能扩展容量等问题。复杂数据结构的实现等问题。比如文件的操作就决不能离开指针的助力。打开文件时,系统就构建了操作文件的指针,该指针是指向一个临时构建的内存区域,其中存储了文件的相关资料。以后读写文件的数据就借这个文件指针完成。最后的步骤是关闭文件。事实是文件指针指向的内存区域释放了,文件关上了操作的大门。

用指针可以把逻辑上相关的一些数据或函数串联起来。比如链表就是存储不连续的数据但逻辑上相关,就需要指针变量来建立逻辑关系。许多非数值问题就需要指针、链表的帮助,才能解决问题。

3 注意

使用指针时,指针变量一定要指向一个存在的对象后,才能用指针来访问指向的对象,否则就会出现安全隐患。如下代码是危险的。

参考文献:

[1] Jeri R. Hanly, Elliot B. Koffman. C语言详解M]. 2007.

[2] 裘宗燕. 从问题到程序:程序设计与C语言引论.2版[M]. 机械工业出版社, 2011.

[3] GregPerry. 写给大家看的C语言书[M]. 人民邮电出版社, 2010.

【通联编辑:光文玲】

猜你喜欢
指针C语言内存
外部高速缓存与非易失内存结合的混合内存体系结构特性评测
基于Visual Studio Code的C语言程序设计实践教学探索
“春夏秋冬”的内存
基于C语言的计算机软件编程
高职高专院校C语言程序设计教学改革探索
基于改进Hough变换和BP网络的指针仪表识别
论子函数在C语言数据格式输出中的应用
ARM Cortex—MO/MO+单片机的指针变量替换方法
基于内存的地理信息访问技术