浅谈C语言程序设计中的指针

来源 :硅谷 | 被引量 : 0次 | 上传用户:godmouse
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  [摘要]C语言中的指针概念比较复杂,但使用时很灵活。正确而灵活地运用指针可以有效地表示复杂的数据结构;能动态分配内存;有效而方便地使用数组等。从五个方面介绍指针。
  [关键词]算术运算 运算符&和* 指针表达式 指针和数组
  中图分类号:TP3文献标识码:A 文章编号:1671-7597(2008)0310036-01
  
  一、指针的概念
  
  指针是一个特殊的变量,它的值是内存的一个地址。要理解指针需要理解三方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区。下面举例说明。例一:
  (1)int*ptr;(2)char*ptr;(3)int(*ptr)[3];(4)int * (*ptr)[4];
  (一)指针的类型
  从语法的角度看,把指针声明语句里的指针名去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。例一中各指针的类型如下:
  (1)int*ptr;/*指针的类型是int* */ (2)char*ptr;/*指针的类型是char* */(3)int(*ptr)[3];/*指针的类型是int(*)[3]*/(4)int*(*ptr)[4];/* 指针的类型是int*(*)[4]*/
  (二)指针所指向的类型
  当通过指针来访问指针所指向的内存区时,指针所指向的内存区存储的数据的类型即为指针所指向的类型。
  从语法的角度看,把指针声明语句里的指针名和名字左边的指针声明符*去掉,剩下的部分就是这个指针所指向的类型。例一中指针所指向的类型如下:
  (1)int*ptr;/* 指针所指向的类型是int */ (2)char*ptr;/*指针所指向的类型是char */(3)int(*ptr)[3];/* 指针所指向的类型是int()[3]*/ (4)int*(*ptr)[4];/* 指针所指向的类型是int*()[4]*/
  (三)指针的值
  指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一般的数值。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。如果一个指针的值是XX,就相当于该指针指向了以XX为首地址的一片内存区域。
  
  二、指针的算术运算
  
  指针可以加上或减去一个整数,这和C语言中的算术表达式意义是不同的。例二:
  (1)int a[20];(2)int *ptr=a;(3)………(4)ptr++;
  在上例中,指针ptr的类型是int *,它指向的类型是int,它被初始化为指向数组a的起始地址,接下来的第4句中,指针ptr被加了1,编译器编译程序时把指针ptr的值加上了sizeof(int)。
  由于int型在32位机中的长度是四个字节,故原来ptr指向数组第0号单元开始的四个字节,此时指向数组从第4号单元开始的四个字节。
  
  三、运算符&和*
  
  &是取地址运算符,*是指针运算符或称为间接访问运算符。&a的运算结果是一个地址,即变量a 的地址。*p为指针变量p所指向的存储单元的内容,即p所指向的变量的值。下面举例说明。例三:
  int a=12;
  int b;
  int * p;
  int * * ptr;
  p=&a;/* 把变量a的地址赋给指针变量p。 */
  *p=24; /* 把24赋给指针变量p所指向的存储单元的内容。*/
  ptr=&p; /*把指针变量p的地址赋给指针变量ptr。*/
  *ptr=&b;/*把变量b的地址赋给指针变量ptr。 */
  * *ptr=34; /**ptr的结果是ptr所指向的存储单元的内容,即变量b的地址,再做一次*运算,结果就是一个int类型的变量。*/
  
  四、指针表达式
  
  如果一个表达式的最后结果是一个指针,那么这个表达式就叫指针表达式。举例如下:例四:
  int a,b;
  int array[10];
  int * pa;
  pa=&a;
  int * * ptr=&pa;
  *ptr=&b;
  pa=array;
  pa++; /* &a,&pa,*ptr,&b,pa++都是指针表达式。 */
  由于指针表达式的结果是一个指针,所以指针表达式也具有指针所具有的三个要素。当一个指针表达式的结果指针已经明确地具有了指针自身所占的内存的时,这个指针表达式就是一个左值,否则不是。
  
  五、指针和数组的关系
  
  数组的数组名实际上是数组的起始地址,所以数组名可以看作是一个指针。举例如下:例五:
  int array[10]={0,1,2,3,4,5,6,7,8,9},value;
  ... ...
  value=array[0];/* 也可写成:value=*array;*/
  value=array[3];/* 也可写成:value=*(array+3);*/
  上例中若把array看作指针,则它指向了array[0]的地址。例中array+3是一个指向数组元素array[3]的地址。
  总之,若声明一个数组TYPE array[n],则数组名array有两重含义:第一,它代表整个数组,它的类型是TYPE[n];第二,它是一个指针,该指针的类型是TYPE*,该指针指向的类型是TYPE,也就是数组元素的类型,该指针指向的内存区就是数组第0号单元,该指针自己占有单独的内存区,它和数组第0号单元所占用的内存区是不同的。该指针的值是不能修改的,即类似array++的表达式是错误的。
  
  六、结语
  
  指针是C语言中的一个重要概念,也是C语言的一个重要特色。掌握指针的应用,可以使程序简洁、紧凑、高效。每个学习和使用C语言的人,都应当多思考、多上机,在实践中深入地学习和掌握指针。
  
  参考文献:
  [1]潭浩强,C程序设计.北京:清华大学出版社. 2005.7.
  [2]洪维恩,C程序设计.北京:中国铁道出版社. 2003.11.
其他文献
[摘要]介绍当今大学生自我意识的现状和特点,并从自我意识的形式:自我认知、自我体验和自我控制三个方面,分析论述大学生自我意识中影响自我和谐的因素,提出大学生自我和谐的有效构建措施。  [关键词]大学生 自我意识 自我和谐  中图分类号:G41文献标识码:A 文章编号:1671-7597(2008)0510129-01    自我也称自我意识,乃是对自己存在的觉察,即自己认识自己的一切,包括认识自己
期刊
[摘要]2007年6月,成都市被正式批准为全国统筹城乡综合配套改革试验区的“新特区”。通过对彭镇经济发展模式的调研,总结出产业化经济发展模式的特点,为新特区城乡统筹发展及新农村建设的进一步推进提供参考。  [关键词]成渝新特区 城乡统筹 新农村建设 产业化经济发展模式  中图分类号:F29 文献标识码:A 文章编号:1671-7597(2008)0510126-01    2007年6月7日,国家
期刊
[摘要]介绍西门子6SE70系列变频器的几种常见控制方式,之后将对该系列变频器有代表性的故障现象进行分析。  [关键词]西门子6SE70 控制方式 故障现象  中图分类号:TM4文献标识码:B 文章编号:1671-7597(2008)0310010-01    变频调速,特别是变频调速技术的发展,已使世界范围内的电气传动控制领域发生了根本性的变革。它是计算机控制技术、智能控制技术、电力电子技术等的
期刊
[摘要]以苏州城市历史文化保护为例对历史街区的保护、整治与有机更新进行了思考。  [关键词]线性空间 风貌 城市意象 文脉  中图分类号:TU98 文献标识码:A 文章编号:1671-7597(2008)0510135-01    “街区”,顾名思义即为街道或道路再加上用以围合空间的建筑物。    一、历史街区的涵义及保护意义    历史街区兼具有文脉和功能上的双重涵义,既保持有一般意义上街区的通
期刊
[摘 要]随着改革的不断深入,我国经济已逐步全球化。本文主要论述我国加入WTO后对会计方面的挑战以及我国在入世后应进行的改革和对应措施。  [关键词]挑战 经济一体化 国际准则  中图分类号:F23 文献标识码:A 文章编号:1671-7597(2008)0510131-01    WTO是国际贸易自由化与世界经济全球化的客观要求,WTO它推进了各国贸易间的经济联系和发展。我国加入WTO后,按照国
期刊
[摘要]邯钢炼钢区物流跟踪管理系统,利用计算机互联网技术,实现了生产岗位统计数据和计划数据的共享,并且对原有生产线不能提供的技术数据进行获取和汇总分析,为生产管理者提供了指挥生产所必需的实时数据,从而使生产活动能够有计划、按比例地协调发展,提高了生产的工作效率和科学决策能力。  [关键词]生产三级 网络技术 数据共享 指导生产  中图分类号:TP2 文献标识码:A文章编号:1671-7597 (2
期刊
[摘要]传统的电话号码人工检索已经很难适应时代的发展,在信息化时代的今天,很多企业都建立了自己的内部网络,探讨一种方法,可以充分利用现有的网络资源,建立基于B/S模式的电话号码检索系统,来实现电话号码的检索。  [关键词]B/S ASP 数据库 检索  中图分类号:TN91文献标识码:A 文章编号:1671-7597(2008)0310017-01    一、引言    随着中国经济的飞速发展,很
期刊
[摘要]利用先进的通信技术、计算机技术和自动控制技术,基于集中控制系统的策略,设计了以PC 机作为监控主机,无线通信为主要通讯方式,单片机作为远程控制终端核心的多路密码遥控系统。经实验验证该系统具有软硬件设计简单,易于开发,成本较低,安全可靠,操作方便等特点,可作为产品进行开发,应用于近距离无线控制多路强电设备开关的场所,对提高了用电设备管理的现代化水平、缩短故障发现时间和维护周期等方面起到很大的
期刊
[摘要]随着PLC应用越来越广泛,它的抗干扰问题也日益引起人们的重视。分析PLC控制系统中的主要干扰来源,并提出了几种PLC控制系统的具体抗干扰措施。  [关键词]PLC控制系统 抗干扰 措施  中图分类号:TN97文献标示码:A文章编号:1671-7597 (2008) 0310020-01    随着科学技术的发展,PLC在工业控制中的应用越来越广泛。尽管PLC自身已具备较好的抗干扰能力,但还
期刊
[摘要]柯尔伯格的道德认知发展理论,与皮亚杰的道德认知发展学说一脉相承,这一理论描述了道德认知结构不变序列的普遍发展过程。以往学者对柯尔伯格的道德发展理论的研究往往侧重于某一个维度的介绍和分析,则旨在全面审视该理论所体现的三个维度及其内在的逻辑性和相关性,在使理论“回家”的同时,力图凸显对当今学校德育的现实意义。  [关键词]柯尔伯格 道德认知发展理论 学校德育  中图分类号:G41文献标识码:A
期刊