浅析C语言中指针的应用
谢忠东
摘 要:指针是C语言的精华部分,也是C语言课程的重点和难点章节之一,在C语言编程中起着重要的作用。只有理解了指针并能灵活运用指针,才算真正学会了C语言。因此我们在C语言教学过程中应特别注意指针,引导学生正确灵活地应用指针,编制高效的程序,发挥C语言的优势。
关键词:C语言;指针;函数;数组
指针是C语言中一个重要的概念,是C语言课程的重点难点章节之一,也是C语言的精华部分,在C语言编程中起着重要的作用。利用指针可以编写灵活高效的程序。只有理解了指针并能灵活运用指针,才算真正学会了C语言。因此我们在C语言教学过程中应特别注意指针单元,引导学生正确灵活地应用指针,编制高效的程序,发挥C语言的优势。但由于指针是一种特殊的数据类型,概念较复杂,大多数初学者感到较难理解,使用不好反而会带来一些麻烦。
1 理解指针概念
在C语言中定义的任意变量,在内存中都占用一定的存储单元。存储单元的每个字节都对应一个编号(就好比酒店中设有很多间客房,每间客房都有对应的房牌号),此编号就是变量在内存中的存储地址。指针就是用来表示这些地址的变量。简单地说,指针就是地址。例如:int x;int *point;point=&x;;表示point为指针变量,存放变量x的地址;x就是指针变量point所指向的变量。假设x的地址为2016,则point所存储的地址即为2016。很多学生最初都存在这样的疑问:若2016是变量x的地址,那么要表示指针point存放变量x的地址是否可以这样赋值:point=2016。这是错误的,这个赋值语句中的2016表示是一个整型数据,不能表示地址。对于指针变量的赋值只能用取地址运算符"&"进行赋值,即:point=&x;;&x;表示变量x的地址。初学者还需注意:指针必须先赋值后使用,指针指向的变量类型必须和指针类型一致。
2 区分定义指针变量的*和指针运算符*
定义指针变量语句中的*是对指针变量的说明,如int *point表示定义point是一个指向int类型的指针变量。
指针运算符*是一个单目运算符,必须和指针变量结合表示间接访问该指针指向的对象。如int x=50,*point=&x;;*point=60;第1个*表示定义point是一个指向x的指针变量,第2个*和指针共同组成表达式*point表示间接访问x,相当于给x重新赋值为60。
3 指针与数组
一个数组由若干个元素组成,每个元素都对应一个地址,C语言中定义数组的指针,是指向整个数组的起始地址,和数组名表示的地址相同。数组元素的指针是数组元素的地址。例如:char s[10];char *p;这里的数组名s就是数组的首地址,若赋值p=s,则p为指向数组s的指针,表示整个数组的首地址,s+3表示距离s后3个位置所在单元的地址。s[3]表示数组中第4个元素的值,即距离s后3个位置所在单元中的值,因此s[3]与*(s+3)等价。由于p也表示数组的首地址,p+3与s+3等价,因此p[3]与*(p+3)、s[3]、*(s+3)等价。需要注意的是,p是允许移动的,如p=p+2,表示p发生改变,变为指向元素s[2]的地址,此时p[3]、*(p+3)不再表示s[3]的值,而是与s[5]等价。而此例中的s只能表示数组的首地址,不能出现这样的赋值:s=s+2。
4 指针与函数
在指针与函数的关系中,有函数指针、指针函数、指针作为函数参数的三种常用形式。
(1)函数指针
函数指针是指向函数起始地址的指针,定义格式是:类型名 (*指针变量名)( );由于函数是一个整体,函数指针不能做自增、自减运算。
(2)指针函数
指针函数是表示指针的函数,其本质是一个函数,返回值是某一类型的指针,定义格式是:类型名 *函数名(参数列表);由于返回值是地址,因此类型一般都定义为int。
(3)指针作为函数的参数
函数的参数可以为字符型、整型、浮点型等数据,也可以是指针类型,它的作用是将变量的地址传递到另一个函数中。
例如,有两个整型变量,m的值为55,n的值为66,若要交换m、n的值,使得m的值为66,n的值为55。首先我们以传值的方式构建函数:
Void func_val(int x,int y)
{
t=x;
x=y;
y=t;
}
在调用函数func_val(m,n)后,发现m、n的值并没有被交换。因为函数调用时,将实参的值传递给形参,函数最终交换的值是形参x、y的值,并不是实参m、n的值。
要想使函数对两个实参进行交换,必须使实参与赋值后的形参变量所处的地址是相同的。可以以指针的形式作为形参重新构建函数:
Void func_addr(int *p,int *q)
{
t=*p;
*p=*q;
*q=t;
}
在调用函数时,必须将m、n地址传递给以指针形式表示的形参p、q,调用表达式应为func_addr(&m;,&n;),调用之后实参m、n的值被交换了。通过此例可以看出,指针作为形参可以改变实参的值,使函数构建的功能更加模块化。在C语言程序设计过程中,指针可能是实现某些算法的唯一方法。
5 结束语
C语言程序设计是国内外大学计算机课程中重要的课程之一,指针是该课程中非常重要的部分,也是难点之一。在理论学习了指针的各知识点后,还应鼓励学生在课后要多思考、多编程、多实践。
参考文献:
[1]杨智明.C语言指针使用分析[J].保山学院学报,2012.