开篇:润墨网以专业的文秘视角,为您筛选了一篇C语言指针的应用范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
摘要:指针是C语言的灵魂,是C语言的精华和重要特色,理解指针的概念应从计算机存储系统硬件结构入手。它是C语言学习的重点和难点,也是学好C语言的关键,针对学生在学习指针过程中遇到的困难及使用指针过程中出现的常见错误,该文从指针的定义、指针的基本操作、指针与其他数据类型的关系等方面对指针做详细分析,以助学习者更好的理解与记忆。
关键词:C程序设计;指针;数组;函数;字符串;内存地址;变量参数
中图分类号:TP3112文献标识码:A文章编号:1009-3044(2009)35-9982-02
指针是C语言的一个重要概念。由于指针的概念比较抽象,使用起来又相对灵活,因而正确理解和运用指针就成了C语言程序设计的一个难点,掌握好指针,可以增强学生阅读C程序的能力,可以使程序变得简洁、紧凑和高效,同时也让学生对“ 驾驭了” 计算机产生一种自豪感,为日后更进一步的学习奠定良好的基础。
计算机内存中的每个存储单元,都有一个相应编号,叫做内存地址。若在程序中定义了一个变量,C编译系统就会根据定义中变量的类型。为其分配一定字节数的内存空间。同时建立一个变量名与地址间的对应关系。变量值就存放于该地址的内存单元中。而指针(即地址)也是一种数据类型,指针变量是只能存放地址类型数据的变量,我们把存放指针的变量称为指针变量,简称指针。这个变量和基本变量的不同点就在于基本类型变量内部存储了同类型的常量,而指针变量内部存储的则是“同类型变量的首地址”(所指向的变量的地址)。
在C语言中,访问数据对象一般采用直接访问的方法,而引入指针变量的目的则是用来间接访问数据对象,这种访问的特点是先找到存放数据的地址,然后通过该地址来访问数据。
指针变量的定义:基类型 *指针变量名;
此处的“*”要与指针运算符“*”区分开,前者用来标示所定义的变量是指针变量,只起到标志的作用;而后者是一个运算符,用于取该指针变量所指向的变量。无论什么样的基类型,指针变量本身所占内存大小一般是固定的,与CPU的地址总线宽度及计算机的系统总线有关。指针变量可以指向变量,也可以指向数组、字符串,还可以指向函数。使用时要切记:一定要让指针变量指向同类型的数据。
1 指针的基本操作
指针的基本操作包括指针赋值、取地址、判断指针是否为空、计算两地址间相隔元素的个数、操作符“-”或“+”运算以及指针操作符综合运用等。
指针赋值、取地址运算在指针运用中比较普遍,如int i=5;int *ip=&i;判断指针是否为空可以用语句if(ip==0)或if(ip==NULL),其中ip为指针变量。
指针“-”或“+”一个整数n,表示将指针由当前位置移动到前面(或后面)的第n个数据处。两指针相减的结果是两指针之间相隔数据的个数,结果是一个整数,而不是地址。如:int a[10];int *x=a,*y=a;则x+2表示将指针x由指向a数组中第一个元素改为向后移动两个数据,即指向第三个元素。而x-y的结果是x与y这两个指针之间相隔数据的个数,等于2。利用这个特点,若将y指向数组a的首地址,将x移到a数组的末尾,则用x-y就可以求出数组a的长度,即a中数据的个数。
2 指针与数组的关系
指针常用于数组中,数组名本身是一个指向该数组首地址的常量指针。在应用时把数组名赋值给指针,通过指针的运算可以定位到数组中的任一元素。应用指针和数组的方式都可以访问数组中的元素,但二者的访问效率并不一样。指向同一数组的两个指针变量可作减法(结果为相隔的元素个数)及关系运算。
如:int a[5]={1,2,3,4,5},*p;
语句:for(p=a;p
使用指针法访问数组元素时,要注意“下标是否越界”的问题。如p+5表示指向a数组中的第6个整型单元,此时已超出a数组的有效范围。所取得的数据显然是无意义的。但C编译系统并不指出“下标越界”这样的错误。所以使用者在使用时应注意指针变量所指向的位置。
3 指针与函数的关系
指针与函数的关系有三种:
第一种关系:指针作为函数的参数,可用于传递变量的地址或数组的首地址。此时,我们将实参指针值单向传递给形参变量,则实参和形参指向同一个空间,调用函数可以改变该空间的内容。若传递的是数组的首地址则可以改变实参数组中元素的值。另外,普通函数调用只可以得到一个返回值(即函数值),而运用指针变量作为函数参数可以通过一次函数的调用改变多个变量的值,如果不用指针是难以做到这一点的。
第二种关系:函数的返回值是指针。定义方式:数据类型 *函数名(参数列表){函数体}
第三种关系:指向函数的指针变量。定义方式:数据类型( *指针变量名)(参数列表)
要注意区分上述两种情况。
4 指向指针的指针变量
指针变量既然是变量,当然也会有自己的内存地址,当然也就可以被别的指针变量所指向了,此时别的指针变量就是指向指针的指针变量(二级指针)。
指向指针的指针变量的定义格式:基类型 指针变量名;
如int **p;这种用法主要是为了在函数中改变指针实参和应用于多个字符串构成的二维字符数组。
如:void pad(int **PP){( *pp)++;}
int a[5]={1,2,3,4,5},*p;p=a;pad(&p);
P的值被改变,指向下一个元素2,因为padO中的pp指向P,*pp即为p,(*pp)++即为p++。它们的指向关系为:
图1
指针是c语言中重要的概念,是c的一个特色利用它可以编写出颇有特色的、质量优良的程序,实现许多其他高级语言难以实现的功能。但指针的使用太灵活,也十分容易出错,因此使用指针时要十分小心,并且在编程过程中不断掌握指针的使用技巧,通过实践中的不断摸索才能准确无误地驾驭指针,读者应该多多思考,多多上机操作,体会其中的奥妙。
参考文献:
[1] 谭浩强.C程序设计[M].北京:清华大学出版社,1999.
[2] 王声决,罗坚.c语言程序设计[M].北京:中国铁道出版社,2002.
[3] 王建平.C语言程序设计[M].北京:中国水利水电出版社,2001.
[4] 林东.编程语言基础 C语言[M].2版.北京:高等教育出版社,2006.