首页 C语言中指针的应用

C语言中指针的应用

举报
开通vip

C语言中指针的应用  Ξ  收稿日期 :2007 - 01 - 03 作者简介 :杨立 (1978 - ) ,男 ,山西万荣人 ,山西大学硕士研究生 ,运城学院公共计算机教学部教师 ,主要从事计算 机应用技术研究. 【计算机与信息工程】 C 语言中指针的应用 Ξ 杨 立1 ,2 (1. 山西大学 计算机与信息技术学院 ,太原  030006 ;2.运城学院 公共计算机教学部 ,山西 运城  044000) 摘要 :指针的使用是 C语言程序设计中一个重要的特色. 从指针的定义和指针的类型等方面对 C 语言指针的概念进行了简...

C语言中指针的应用
 Ξ  收稿日期 :2007 - 01 - 03 作者简介 :杨立 (1978 - ) ,男 ,山西万荣人 ,山西大学硕士研究生 ,运城学院公共计算机教学部教师 ,主要从事计算 机应用技术研究. 【计算机与信息工程】 C 语言中指针的应用 Ξ 杨 立1 ,2 (1. 山西大学 计算机与信息技术学院 ,太原  030006 ;2.运城学院 公共计算机教学部 ,山西 运城  044000) 摘要 :指针的使用是 C语言程序设计中一个重要的特色. 从指针的定义和指针的类型等方面对 C 语言指针的概念进行了简单的 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 ,并总结了 C语言中指针的基本用法. 关  键  词 :C语言 ;指针 ;数组 中图分类号 :TP312     文献标识码 :A 文章编号 :1671 - 0924(2007) 04 - 0114 - 03 Application of Pointer in C Program Language YANGLi1 ,2 (1. School of Computer and Information Technology ,Shanxi University , Taiyuan 030006 ,China ; 2. Department Public Computer Teaching , Yuncheng University , Yuncheng 044000 ,China) Abstract : The use of the pointer plays an important role in the C language program design. From the defini2 tion and the type of the pointer , this paper analyzes the concept of the pointer of C program language , sum2 marizes the basic application of the pointer in C program language. Key words : C program language ; pointer ; array 0  引言   C 语言具有高级语言和低级语言的双重特性 ,可移植 性强 ,适合开发各种类型的软件系统. 同时 ,C 语言也是学 习程序设计、数据结构和编译原理等课程的基础 ,是学生 进一步深造的敲门砖 ,各高校对 C 语言的教学也越来越重 视.用 C语言编写的程序中可以运用指针有效 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示复杂的 数据结构 ,动态分配存储空间 ,方便地引用字符串和数组 , 在函数调用中获得多个返回值 ,并且可以直接处理内存地 址等等. 正确而灵活的运用指针可使程序简洁、明快 ,大大 提高程序的灵活性和运行速度. 但是由于指针太过灵活 , 一旦使用不当 ,不仅错误难查 ,而且会出现意想不到的错 误.因此 ,要编出正确而高效的程序 ,必须正确的理解和使 用指针. 1  对指针的理解   计算机中内存单元的地址又称为指针 ,存放指针的变 量称为指针变量 ,内存单元中存放的数据即为内存变量的 值.首先要弄清指针变量与指针的指向变量的区别 :指针 变量存放的是指向变量的地址 ,而指向变量存放的是数 据. 例 1 :int 3 p ,x = 100 ; p = x ; / 3 错误 3 / 这是初学者常犯的一种错误 ,他们没有弄清指针的概 念 ,实际上 p 应该接收一个 int 型对象地址值 ,如 :p = &x. 第 21 卷  第 4 期 Vol. 21  No. 4 重 庆 工 学 院 学 报 (自然科学版) Journal of Chongqing Institute of Technology(Natural Science Edition) 2007 年 4 月 Apr. 2007 2  指针的类型   指针变量的类型是指指针所指向数据的类型 ,也称为 指针变量的基类型. 不同类型的变量其所占内存单元的长 度是不同的 ,如 char 型占 1 个字节 ,double 型占 8 个字节. 因此 ,当定义指针变量时就必须指出其基类型 ,这样系统 就会根据指针变量的基类型判断读取长度为多少字节的 存储单元. 在给指针变量进行赋值时 ,所赋地址的基类型 必须和指针变量的基类型相同. 例 2 :int 3 p ; double x = 100 ; p = &x ; / 3 错误 3 / 例 2 中指针变量 p 的基类型为 int 型 ,它不能指向实型 变量 ,只能指向 int 型的变量. 3  指针的使用 3. 1  通过指针引用变量或数组元素 1) 使用指针变量之前必须赋初值 ,这个初值应该是地 址值. 例 3 :int 3 p ;3 p = 100 ; / 3 错误 3 / 例 3 中所定义的指针变量 p 在使用之前没有给它赋 以确定的值 ,因此它的值是不确定的 ,即随机的指向某一 内存单元 ,程序运行时将会把该存储单元原有的数据覆 盖 ,若刚好指向系统的数据区 ,将会导致系统的破坏 ,甚至 系统的瘫痪. 2) 指针与数组的应用. 对于数组的操作 ,在某些情况 下只能通过指针来进行 ,例如 :通过调用函数对数组进行 操作. 当一个指针指向一个数组时 ,数组元素的引用可以 通过指针变量法、下标法和数组名法等多种方式来引用. 但对于多维数组的引用方式却不好理解. 例 4 :mian( ) {int a[2 ] [3 ] = {1 ,2 ,3 ,4 ,5 ,6} ,i ; int ( 3 p) [3 ] ; p = a ; for (i = 0 ;i < 2 ;i + + ) { printf (“%d”, ( 3 p) [1 ]) ; p + + ; } } 在这个程序中 , p 是一个数组指针 ,其实质是指针 ,该 指针指向一个数组. 经赋值后指针变量 p 指向数组 a 的首 地址 ,即指向二维数组的首行. 第 1 次执行 printf 函数时输 出第 1 行的第 2 个元素 ,即 ( 3 p) [1 ]的值为 2 ;第 2 次执行 printf 函数时 ,指针变量 p 向下移动一行 ,即指向二维数组 的第 2 行 ,输出这一行的第 2 个元素 ,即 ( 3 p) [ 1 ]的值为 5. 其存储结构图如图 1 所示 : 图 1  数组指针 p 与二维数组 a 3. 2  用指针建立“动态数组” 在 C 语言中 ,一般在定义数组时就指定了数组的长 度 ,但是在处理实际问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 中 ,经常要对数组进行插入或删 除元素的操作 ,所以希望数组是动态的 ,即数组中的长度 是可变的. 通过指针可以实现数组的“动态性”,其 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 是 : 在内存区申请一块内存空间 ,将这块内存的首地址赋给某 指针变量 ,通过对指针的操作 ,将数据存到这块内存中. 例 5 : # include < stdlib. h > main( ) { int n ,i , 3 p ; scanf (″%d″, &n) ; p = (int 3 ) calloc ( n , sizeof (int) ) ; / 3 申请一块内存空间 3 / if (p) / 3 判断空间申请是否成功 3 / for (i = 0 ;i < n ;i + + ) p [i ] = i ; ⋯⋯} 在例 5 这段程序中申请了一个长度为 2 n 个字节的内 存空间 ,即相当于定义了一个含有 n 个元素的整型数组. 但要注意用完这块内存空间后要及时将它释放掉 ,以便被 其它程序所用. 释放内存空间的函数是 free ( p) . 3. 3  用指针数组建立字符串数组 一个数组 ,如果每个元素都是相同类型的指针 ,称它 为指针数组 ,如果每个指针都可以指向一个字符串 ,则称 为字符串数组. 假设有 3 个姓名字符串 ,需要存储在一个数组中 ,可以 用二维数组来定义 : char name [ 3 ] [ 13 ] = {“wang fei”,“li xiao feng”,“liu mei”} ; 其存储如图 2 所示 (假设数组的首地址为 2000) . 图 2  字符串数组用二维数组定义后的存储   如果有一个字符串比较长 ,则要求数组第二维的大小 必须按此长度定义 ,这就会浪费许多内存单元. 也可以用指针数组来定义 : char 3 name[3 ] = {“wang fei”,“li xiao feng”,“liu mei”} ; 其存储如图 3 所示 (假设数组的首地址为 2000) . 图 3  字符串数组用指针数组定义后的存储   从图 2 和图 3 可以看出 ,用二维数组时每行的长度是 相同的 ;而用指针数组时 ,并未定义行的长度 ,只是分别在 内存中存储了长度不同的字符串 ,然后用指针数组中的元 素分别指向它们 ,在内存中没有浪费存储单元. 所以用指 针数组处理字符串可以节省内存 ,而且提高运算效率 ,例 511杨  立 :C语言中指针的应用 如 :对姓名按由小到大的顺序进行排序 ,只需要改变指针 数组中各元素的指向 ,这显然要比移动字符串所花的时间 要少. 3. 4  利用指针建立链表 链表是一种常见的、重要的数据结构 ,它是动态地进 行存储分配的一种结构. 在 C 语言中 ,使用数组必须事先 定义固定的长度 ,而事先估计长度是困难的 ,太大会造成 存储空间的浪费 ,太小又不易扩充. 指针和结构体配合可 以实现动态存储分配 ,用来实现对链表的创建、插入和删 除等操作. 建立一个单向链表的操作 步骤 新产品开发流程的步骤课题研究的五个步骤成本核算步骤微型课题研究步骤数控铣床操作步骤 是 : ①读取数据 , ②生 成新结点 , ③将数据存入结点的成员变量中 , ④将新结点 插入到链表中. 重复上述操作直至输入结束. 例 6 : 用函数 creatslist ( ) 来建立一个带头节点的单链表 ,链 表的结构如图 4 所示 ,新的结点总是插入在链表的末尾. 链 表的头指针作为函数值返回 ,链表最后一个节点的 next 成 员放入 NULL ,作为链表结束标志. 读入数据时 , - 1 作为输 入结束的标志. 图 4  链表结点结构图   # include < stdio. h > # include < stdlib. h > struct slist { int data ; struct slist 3 next ; } ; typedef struct slist SLIST; SLIST 3 creatlist ( ) {int c ; SLIST 3 h , 3 s , 3 r ; h = (SLIST 3 ) malloc (sizeof (SLIST) ) ; r = h ; scanf (“%d”, &c) ; while (c ! = - 1) {s = (SLIST 3 ) malloc (sizeof (SLIST) ) ; s - > data = c ; r - > next = s ; r = s ; scanf (“%d”, &c) ; } r - > next = NULL ; return h ; } 4  结束语   指针是 C 语言中一个重要的概念 ,在 C 语言的编程中 占有重要地位. 在学习时只要加深对指针基本概念的理 解 ,掌握指针正确的使用方法 ,就可以编出灵活多样的程 序.在 C语言的教学中 ,指针的使用和所存在的问题还有 很多 ,本文中所提的是作者在教学中的一些体会 ,希望对 C 语言的学习有所帮助. 参考文献 : [1 ]  谭浩强. C语言程序设计教程 [M] . 北京 :高等教育出 版社 ,1998. [2 ]  田淑清. 全国计算机等级考试二级教程 —C 语言程序 设计[M] .北京 :高等教育出版社 ,2003. [3 ]  朱承学. C语言程序设计教程[M] .北京 :中国水利水 电出版社 ,2004. (责任编辑  刘  舸) (上接第 91 页)络延迟 ,导致无法进行端到端的 IP 跟踪 ,并 且对有的数据流类型 ,如 VPN ,SNMP 等数据流 ,CIS2CO IOS 并不支持. 另外 NAT所提供的安全性是有限的 ,NAT只对 地址进行转换而不进行其他操作 ,因此 ,当建立了与外部 网络的连接时 ,NAT不会阻止任何从外部返回的恶意破坏 信息. 另外网络安全协议 IPSec 和网络地址转换协议 NAT 之间的冲突问题也产生出来 ,并在逐步研究解决中. 如果 单位对网络安全性要求较高 ,还要采用防火墙、代理服务 器、ACL 等技术与 NAT技术相结合来使用. 参考文献 : [1 ]  Srisuresh P , Holdrege M. RFC 2663 IP Network Address Translator (NAT) Terminologyand Considerations[M]. [ S. l . ] : [ s. n. ] ,1999. [2 ]  K Egevang. RFC16312The IP Network Address Translator (NAT) [ EB/ OL ] . [ 2005 - 09 - 03 ] . http :/ / www. no/ edu. net/ it/ rfc/ 200509/ 44958 - 9/ sht/ ml. [3 ]  P Srisuresh. RFC30222Traditional IP Network Address Translator[ EB/ OL ] . [ 2001 - 05 - 11 ] . http :/ / www. net2 work dictionary. com/ chinese/ rfc/ rfc3022. php. [4 ]  谭峻松. NAT网络穿越技术的研究 [J ] . 微计算机信 息 ,2006 ,18 :18. [5 ]  Behrouz A Forouzan. 数据通信与网络[M] . 北京 :机械 工业出版社 ,2005. (责任编辑  陈  松) 611 重 庆 工 学 院 学 报
本文档为【C语言中指针的应用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_539357
暂无简介~
格式:pdf
大小:246KB
软件:PDF阅读器
页数:3
分类:工学
上传时间:2011-07-12
浏览量:34