第 21 卷第 8 期长春大学学报Vol 21No 8 2011 年 8 月 JOURNAL OF CHANGCHUN UNIVERSITYAug 2011 收稿日期 2011 06 20 作者简介 李柯景 1980 女 吉林长春人 讲师 硕士 主要从事计算机应用方面研究 浅析 C 语言使用指针的必要性 李柯景 鲁光男 长春大学计算机科学技术学院 长春 130022 摘要 指针是 C 语言的重要组成部分 灵活的使用指针可以提高程序的执行效率 可以建立动态数组 可以灵活 的处理字符串等等 本文简要介绍了指针的重要作用 从而使初学者更好地了解使用指针的必要性 关键词 C 语言 指针 程序效率 动态数组 中图分类号 TP311 11文献标志码 A 文章编号 1009 3907 2011 08 0038 04 0引言 经过多年承担 C 语言程序设计这门课的教学任务 笔者发现学生在初学指针的时候 理解和掌握关于 指针的基本概念并不是很难 但往往在学完指针的基本使用方法之后还是不能够深刻理解指针在 C 语言中 的重要作用 因此 笔者对 C 语言使用指针的必要性做简要的总结 便于学生更好的掌握和理解指针的概 念 灵活的应用指针 1利用指针可以提高程序的效率 1 1利用指针实现对数组元素的间接访问 在 C 语言程序设计中 我们可以通过变量的指针 即变量的内存地址 来引用内存单元的值 这种方式 称为间接访问 对于数组 采用指针变量自增运算引用数组元素要比利用数组名称直接访问的方式执行效 率高 比如 程序段 1 利用数组下标变化访问 int i ints 100 for i 0 i 100 i s i 0 程序段 2 利用指针间接访问 int i ints 100 int p for p s p s 100 p p 0 以上两个程序段完成的功能都是一样的 都是让数组 s 中的所有元素的值均为 0 程序段 1 中 每寻址 一个数组元素都要进行地址的算术运算 即 a i a i 要通过数组名加上偏移量来实现对每个数组 元素的访问 而程序段 2 只需要通过指针的自增运算来实现对数组元素的访问 由于自增运算的执行效率 较高 因此程序段 2 的执行效率要比程序段 1 的高 1 2利用指针实现对字符串的灵活处理 C 语言中利用字符数组存放字符串 可以方便地使用指向字符的指针变量操作字符串 通过指针的移 动来实现对不同位置字符的访问 如果是多个字符串还可以通过字符型指针数组来实现对多个字符串的灵 活处理 如程序 1 include stdio h include string h void main char name Melissa Bob Tom Peter int i for i 0 i 4 i puts name i 对于 Melissa Bob Tom Peter 这四个长度不等的字符串 可以采用字符数组进行存放 由于二 维数组的列数是相等的 若采用二维数组进行存放则比较浪费存储空间 采用字符数组则可以解决这个问 题 可以通过循环 利用指针数组元素下标的变化来实现对不同字符串的访问 大大提高了程序的效率 每个指针数组元素对应一个字符串 倘若相对多个字符串求最大值或者进行排序操作 只需要通过改变 指针数组中个元素的指向 就可以实现 节约了大量移动数据的步骤 程序的效率得到提高 1 3利用函数指针提高程序的效率 函数指针为指向函数的指针 4 函数在内存中占据连续的一片存储单元 而函数名就是这片存储单元 的首地址 可以通过对指向函数的指针变量的访问来完成对函数的调用 如程序 2 所示 include stdio h include math h void main double p 2 double sqrt fabs int x data printf Please input data scanf d data printf Please input x O sqrt 1 fabs scanf d x printf lf n p x data 程序 2 中 定义了一个指向函数的指针数组 数组中的两个元素分别指向函数 sqrt 和 fabs 因此当键盘 上输入数据 data 后 根据用户的选择就可以实现对所输入的数据进行开平方或者求绝对值的操作 对这两 个函数的调用 是通过访问指针数组元素来实现的 倘若程序中所需要调用的函数不仅仅有两个 而是更多 那么就需要用多个的 if 语句或 swich 结构去 判断哪个函数被调用哪个不被调用 那就需要大量的代码 若采用指向函数的指针数组来完成则可以省略 大量的代码书写 通过指针数组下标的变化实现对不同函数的调用 省去了大量编写代码的工作量 代码的 执行效率也得到提高 通过以上的介绍 灵活的使用指针 可以使某些程序的效率得到提高 此外 当函数间参数传递时 尤其 是大量数据的参数 例如结构体变量等 将它们地的址作为参数传给函数 这样可以省去编译器为它们制 作副本所带来的空间和时间上的开销 从而提高了程序的效率 由此可见 灵活的使用指针进行编程 在提 高程序效率方面起着重要的作用 93第 8 期李柯景 等 浅析 C 语言使用指针的必要性 2利用指针变量作函数参数可以得到多个变化的值 当普通变量作函数参数时 只能通过 return 语句得到一个返回值 若被调函数中没有返回值 则无论形 参如何变化 主调函数中的值是不会发生改变的 如程序 3 所示 程序 3 include stdio h voidswap intp intq intt t p p q q t void main inta 3 b 4 swap a b printf a d b d a b 在 swap 函数中实现了变量 p 和 q 的交换 但程序的输出结果仍然为 a 3 b 4 若将程序修改为指针 变量作为函数参数如程序 4 所示 程序 4 include stdio h voidswap int p int q intt t p p q q t void main inta 3 b 4 swap a b printf a d b d a b 该程序的运行结果为 a 4 b 3 实现了 a 与 b 的真正交换 由此可见 使用指针变量作为函数的参 数 可以得到多个变化的值 而不是只能得到一个返回值 3利用指针建立动态数组 指针为 C 语言的动态内存分配系统提供支持 例如 统计本班学生 C 语言程序设计这门课的总分和平均分 可以利用数组来进行编程 由于数组的 大小要在定义时确定 不能够在程序运行时动态分配 因此必须事先确定数组的大小 即班级的人数 假如 班级有 35 名学生 就需要根据分数的数据类型来分配连续的一片存储单元来存放相应的分数 假如程序要 修改为对全年级 350 人进行统计 这期间还有其他原因造成参加考试人员的增减 那么预先分配的数组大 小就要发生改变 倘若个数以最大计则造成了存储空间的浪费 分配太小则又无法临时改变数组的大小 此时 我们可以利用指针来实现对内存的临时分配 在 C 语言中可以利用动态分配函数 malloc 或 calloc 为指针变量分配内存 建立动态数组 例如 int p p int malloc 5 sizeof int 表示向系统申请 5 个连续的整型数相应大小的存储空间 p 指向了这段存储空间的首地址 又如 float q q float calloc 5 sizeof float 04长春大学学报第 21 卷 表示向系统申请 5 个连续的的 float 类型的存储单元 p 指向了该连续存储单元的首地址 4利用指针实现文件操作 在初学 C 语言过程中 处理数据的过程都是从键盘上输入数据 在经过运行后让结果显示在屏幕上 在程序的执行过程当中 所处理的数据都是保存在内存中的 而内存只是临时保存数据 当程序运行结束之 后 输入的数据和运行的结果都会丢失 要想达到永久保存数据和重复使用数据的目的 需要将数据以文件 的形式存储在外部存储器上 ANSI C 标准规定 C 语言处理文件采用缓冲型文件系统 在缓冲型文件系统中 每个被使用的文件都在 内存中开辟一个区 用来存放文件的有关信息 这些信息保存在成为 FILE 的结构类型的变量中 5 读写文 件要通过文件指针来实现 只要是指针指向一个 C 文件 便可以通过该指针变量实现对文件信息的访问 如程序 5 所示 include stdio h include stdlib h void main FILE fp charch if fp fopen a cpp r NULL printf 文件打开错误 n exit 0 while ch fgetc fp EOF putchar ch fclose fp 该程序利用文件指针 fp 将磁盘文件 a cpp 的内容输出到屏幕上 实现了磁盘文件的访问 5结语 通过以上介绍 指针的重要作用包括 利用指针可以提高程序的执行效率 灵活的实现字符串操作 实现 对文件的访问等等 因此 指针在 C 语言中具有重要的地位 学好指针并灵活的使用指针进行编程 是是否 掌握好 C 语言的一个重要标志 参考文献 1 姚合生 C 语言程序设计教程 M 北京 清华大学出版社 2008 2 谭浩强 C 程序设计 M 北京 清华大学出版社 2005 3 李霞 C 语言指针的应用 J 科技创新导报 2009 4 21 23 4 汪明光 C 语言中函数指针的分析与应用 J 巢湖学院学报 2006 8 3 30 34 5 苏小红 陈惠鹏 温东新 李秀坤 C 语言程序设计教程 M 北京 电子工业出版社 2004 责任编辑 吴旭云 Analysis on Necessity of Using Pointer in C Language LI Ke jing LU Guang nan College of Computer Science and Technology Changchun University Changchun 130022 China Abstract Pointer is an important part of C Language Flexible use of pointer can improve the efficiency of the program create dynam ic arrays deal with string and so on This paper describes the important role of the pointer so as to make beginners have a better under standing on the necessity of using the pointer Keywords C Language pointer program efficiency dynamic array 14第 8 期李柯景 等 浅析 C 语言使用指针的必要性

展开阅读全文

c语言中用指针的必要性,浅析C语言使用指针的必要性.pdf相关推荐

  1. c语言循环结构常用语句,浅析C语言三种循环结构语句

    摘 要: C语言是一种广泛使用的高级程序设计语言,文章对C语言中三种循环结构语句进行了分析和比较,使学生更容易理解和掌握. 关键词: C语言 for循环 while循环 do-while循环 一.引言 ...

  2. c语言运行时内存不够,浅析C语言运行时内存管理

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 主要讨论C语言怎样组织正在运行的程序的数据结构的细节. 我们知道知道在UNIX操作系统中,一个C语言文件经过预处理(cp ...

  3. c语言中用rgb改颜色字体,C语言颜色转换宏

    C语言颜色转换宏 #define COLOR_BPP16_RGB555 /* Win RGB */ #define COLOR_RGB(r,g,b) ((COLORREF)(((BYTE)(r)|(( ...

  4. C语言中用链表构建栈讲解,C语言数据结构之使用链表模拟栈的实例

    C语言数据结构之使用链表模拟栈的实例 以下是"使用链表模拟栈"的简单示例: 1. 用C语言实现的版本 #include #include typedef char datatype ...

  5. C语言中用函数实现录入信息模块,C语言程序设计用函数实现模块化程序设计(73页)-原创力文档...

    31/73 #include void main ( ) { int n, p; printf ( =?);scanf (%d, &n); p = fact (n); printf (%d!= ...

  6. 在c语言中用冒泡法比较大小,c语言大小排序,用冒泡法和选择排序法

    满意答案 先上选择法和冒泡法: 1.选择法 #include void main() { int i,j,min,temp; int a[10]; printf("请输入十个整数:" ...

  7. 浅析R语言非参数检验的多组比较及分面与分组的图形艺术

    浅析R语言多组定量资料非参数检验的多组比较及簇状柱形图显著性字母标记之分面与分组的图形艺术 R语言多组定量资料非参数检验的多组比较 非参数检验的应用 本流程是在刘永鑫老师提供的代码资料指导下完成 测试 ...

  8. 数组c语言与指针,浅析C语言数组与指针

    摘 要:数组和指针是C语言的两个最重要的概念,它们若结合起来使用,非常灵活,初学者往往感到无所适从,笔者根据多年的经验,利用典型实例和图表对指向一维数组的指针的定义和数组元素的引用.指针与自增自减运算 ...

  9. c语言中指,浅析C语言中指与数组.doc

    浅析C语言中指与数组 浅析C语言中的指针与数组 指针是C语言中的精华,正确灵活的应用指针,能动态的分配内存,有效的表示复杂的数据结构,方便的使用数组. 指针极大丰富了C语言的功能.指针就是地址,指针变 ...

最新文章

  1. tensorflow API
  2. 每日算法练习之括号配对
  3. 新手福利:免费百页机器学习入门书
  4. mysql通配符_mysql通配符进行模糊查询
  5. 返回图片_Vue 图片压缩并上传至服务器
  6. pythondocumentation是什么_怎样阅读Python官方文档
  7. Nature | 基于66种癌症类型训练机器学习模型,绘制癌症基因潜在驱动突变图谱...
  8. 信息学奥赛一本通 2040:【例5.7】筛选法找质数 (普通筛 线性筛)
  9. TchApp 为dotnet core配个UI,项目已托管github
  10. 咏南中间件+开发框架中秋国庆大促
  11. python中stripped string_【Python爬虫学习笔记(3)】Beautiful Soup库相关知识点总结
  12. 解决鼠标右键中没有新建选项
  13. 零基础搭建外卖优惠券返利CPS小程序教程
  14. Android 源码之Recovery升级的过程和问题分析
  15. DataStreamer Exception
  16. 学习phyton的基础知识
  17. html批量处理图片大小,如何批量修改图片大小?批量处理图片尺寸的方法
  18. 百度地图瓦片 android,深入學習百度地圖Android SDK v4.0.0【第五關】瓦片圖層
  19. 这篇文章告诉你:信息学奥赛的由来,几岁学对孩子有多重要性
  20. 计算机技能大赛奖品,第一届全国技能大赛都有哪些奖励政策?

热门文章

  1. android编辑框最大字数,(转)Android中EditText的输入字数限制
  2. 顺丰快递代码表java_JAVA接入顺丰快递
  3. Linux终端常见命令
  4. 广东未来科技荣膺2021粤港澳大湾区新经济企业100强
  5. 41 01背包 记录方案
  6. “爱心帮”APP走进厦门高校
  7. 关于机房精密空调监控系统,你想了解的都在这里!
  8. 网络安全是什么意思?网络安全产品又包含哪些?
  9. Vue2.0之H5元素Audio属性currentTime、duration应用
  10. iOS开发笔记--基于面向协议MVP模式下的软件设计