C语言指针教学的改革探析

C语言指针教学的改革探析

摘要:指针是C语言的精华,同时又是重难点。从内存的地址分配和存取原理方面深入分析了指针的概念和实质,并对容易发生的错误进行了分析和总结。将指针设置为独立章节,并且在整个内容体系中偏后。对指针的内容体系设置缺点进行了分析,提出应将指针内容和数据类型、数组、函数等知识点有机结合、贯穿始终的改革措施,从而使学生更好地掌握指针内容和熟练运用指针。

关键词关键词:C语言;指针;数据类型;内存分析;课程内容改革;指针指向

中图分类号:G434

文献标识码:A 文章编号文章编号2014)004016803

作者简介作者简介:冯月华(1981-)女,硕士,定西师范高等专科学校计算机系讲师,研究方向为算法及计算机教学。

0 引言

近年来,C语言已经成为大部分理工科专业的必修课,其目的是培养学生的程序设计能力,进而深入理解计算机工作原理及运行过程,以便今后熟练应用计算机解决本学科的诸多问题。

指针是C语言中的一个重要概念,是C语言的精华,正确、灵活运用指针,可以使程序简洁、紧凑、高效,但是指针的概念比较复杂,使用也十分灵活,因此在学习过程中要理解和掌握它存在一定的难度。本文就是从这一问题出发,先让学生掌握组成原理中内存地址划分和存取原理知识,再运用内存图示,深刻掌握和理解指针的概念和本质。由于指针内容设置偏后和集中讲授带来一些缺点,本文对指针的内容体系设置提出了一些新的调整方案,以期提高指针的教学效果。

1 指针概念及实质

1.1 概念

要理解指针的概念,首先要掌握内存的基本存取原理。冯?诺依曼的“程序存储思想”告诉我们,计算机的本质其实是“程序的机器”,其工作原理就是自动、连续地运行存放在内存中的程序的过程。内存是计算机的记忆设备,可以存放二进制数据,但是内存的空间很大,如2GB的内存存放231×8位的二进制数,可用字节将内存分成231个空间,以字节的整数倍大小给程序和数据分配存放空间。为了数据的正确存取,每个空间必须给一个编号,也就是地址,这样就知道数据到底存放在内存空间的什么位置了,取数时也会从确定的地址找到存放空间而不会发生错误。这就相当于一个宾馆中有许多房间,每个房间都有一个不同的编号一样。

假设程序已定义了3个变量i、j、k,变量有3要素:变量名、变量类型、变量值。变量名实际上是以一个名字代表的一个存储空间,存储空间的大小由其类型决定,例如:

short int i=3;

int j=12;

float k=8.3;

char c1=’a’;

图1 内存地址及内存空间分配

不同的编译环境分配给数据类型的存储空间不同,Visual C++6.0编译系统分配给短整型的存储空间是2个,整型是4个,浮点型也为4个,而double型为8个存储空间,字符在存储器中是用它的ASCII码值来存放的,所以分配了一个存储空间,如图1所示。内存的地址从0开始,依次递增,每个存储空间都唯一对应了一个地址编号。假设1000~1001单元用来存放变量i,其值为3,要注意变量地址和变量值是两个概念,就如同房间的号码和房间住的客人是不一样的;同样的1002~1005存放整型变量j,2002~2005存放浮点型变量k,2006单元存放字符变量c1。

程序执行时,通过变量名i找到存储空间的地址,从中取出存放的变量值。程序经过编译之后将变量转换成变量的地址,对变量值的存取都是通过地址进行的,这种直接按变量名的访问方式称为“直接访问”。

假设将i变量的地址存放在变量A_i的存储空间中,现在A_i中不是存放了一个数据,而是地址,要存取变量i的值时,又多了一种方法,如图2所示,通过变量A_i得到其存储空间地址为3020,在该地址中取出存放的值1000,它不是数据,而是i的地址,通过该地址,再访问内存地址为1000的存储空间,取出其中存放的变量i的值3,像这种访问变量i的方法叫“间接访问”。

这样变量A_i和i之间建立起了一种联系,即通过A_i能知道i的地址,从而找到i的内存单元,如图2中用A_i指向变量i箭头表示这种指向关系。

图2 指针变量指向变量空间关系

由于通过地址能找到对应的存储单元,因此将其地址形象化地称为“指针”。一个变量的地址称为该变量的“指针”,如果有一个变量专门存放其它变量的地址(指针),则它称为“指针变量”,如A_i就是一个指针变量,专门用来存放地址,它的值就是地址,也就是指针。

1.2 指针变量

专门存放指针值的变量就是指针变量,它只能存放指针,也就是说指针变量的值是其它变量存储空间的地址,而不是一般数据。如果说一个指针变量的值是X,也就是说该指针指向了以X为首

c语言下标法改为指针变量法,C语言指针教学的改革探析.doc相关推荐

  1. C语言小题,将字符串a复制为字符串b,然后输出字符串b。(地址法和指针变量法)(通过指针引用字符串)

    前言: 此篇是针对 通过指针引用字符串 方面的练习.本篇介绍两种方法 地址法 和 指针变量法. 方法一:(地址法) 解题思路: 定义两个字符数组 a 和 b ,用 "I am a stude ...

  2. c语言的返回类型是指针变量吗,C语言-指针类型

    改值场景示例 - 改变 n 的值 的函数 void change(int n) { n = 10; } int main() { int a = 20; - 这里只能把 变量a 的值传到 change ...

  3. c语言指针变量字节,C语言指针变量类型和大小

    指针变量作为C语言中的特殊数据类型,除了用于存储内存地址之外,它与其他类型比较是否具有其他特点呢?接下来对指针类型进行分析,剖析指针类型的特点. 指针的大小与其指向的内存中存储的变量类型无关,它只与计 ...

  4. 在c语言中定义了一个指针变量后,C语言的指针变量

    C语言的指针变量 在C语言中,变量是固定范围的存储空间,它存储的是赋给他的值, 比如: int a = ; /* 这里是定义一个整型变量a,并把12这个值存储在a的地址空间上 这个地址空间是系统随机分 ...

  5. c语言下标法改为指针变量法,C语言教材第七章指针实验.doc

    C语言教材第七章指针实验.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...

  6. 语言axff所占字节数_【每日一答】(74)数组名v.s.指针变量,C语言其实很简单形象比喻为“是一个朋友圈的”...

    下图选自<C语言其实很简单>第8章: 问:请问张老师!书上第227页一句话:指针变量a本身的地址(a所在内存字节编号)是数组的地址,数值上与元素a[0]的地址相等! 这句话是什么意思,我看 ...

  7. c语言中字符指针变量输入,C语言指针基础知识实例讲解

    对程序进行编译的时候,系统会把变量分配在内存单位中,根据不同的变量类型,分配不同的字节大小.比如int整型变量分配4个字节,char字符型变量分配1个字节等等.被分配在内存的变量,可以通过地址去找到, ...

  8. linux下c 指针变量大小,C语言sizeof关键字

    常年被人误认为函数. sizeof 是关键字不是函数,其实就算不知道它是否为32 个关键字之一时,我们也可以借助编译器确定它的身份.看下面的例子: int i=0: A),sizeof(int): B ...

  9. c语言中按位或赋值给变量,[转载]C语言位运算符在单片机上的应用

    C语言位运算符 学过汇编的朋友都知道汇编对位的处理能力是很强的,但是C语言也能对运算对象进行按位操作,从而使C语言也能具有一定的对 硬件直接进行操作的能力.位运算符的作用是按位对变量进行运算,但是并不 ...

最新文章

  1. MAC安装iterm2及配置
  2. 基于Seam+Carving和显著性分析的图像缩放方法MATLAB仿真
  3. laravel + Vue 前后端分离 之 项目配置 - 开发环境
  4. linux su和sudo命令的区别
  5. 亿级流量网站架构核心技术_关于大型网站系统架构你不得不懂的10个问题
  6. hp打印机怎么连接电脑_hp打印机驱动怎么安装 惠普打印机驱动程序安装方法【详解】...
  7. mysql工作中遇到的问题_mysql - 工作中碰到的问题
  8. opencv进行5种图像变化:
  9. Docker使用redis
  10. 用《只狼》教你学会Git(中)
  11. 重装系统后没有网卡驱动
  12. openpyxl 添加分页符
  13. 制作游戏辅助/外挂违法吗?
  14. 设置单独进程打开资源管理器有效防止电脑假死!
  15. (21)恢复数据(recovery)时间和撤销数据(removal)时间
  16. 贵州小县城出身的“网约车品牌”,如何拓县出省、走向全国?
  17. 解决ps默认打开显卡的设置
  18. 【MySQL】事务管理
  19. 查询同学选修mysql课程的成绩_mysql-练习题 - osc_wy5qpqnh的个人空间 - OSCHINA - 中文开源技术交流社区...
  20. 去哪儿网怎么买火车票

热门文章

  1. android apdp分区,EXE版 KDZTools (无需安装Python)
  2. 桌面计算机的密码修改频率,屏幕刷新频率改不了怎么办 怎么设置屏幕刷新频率...
  3. openfire总结
  4. 企业运维经典面试题汇总 (1)
  5. 在线反馈,急速解决,移动云视频客服让沟通从此不设限
  6. 你买的健康零食,可能是你即将踏上的健康弯路
  7. C++ ifstream :注意事项,ifstream 参数不能是 string 型
  8. adb连接安卓子系统
  9. java jpanel 居中_java将组件居中的方法
  10. 记录之十进制,二进制,十六进制