C语言指针应用

时间:2022-09-07 09:35:14

C语言指针应用

摘 要: “指针”是C语言的精髓,是C语言区独有的功能,在C语言的程序设计过程中起着不可或缺的作用。只有学好了指针才算掌握了C语言,同时指针也是C语言最危险的特性,如果使用不当,则很容易指到意想不到的地方,产生错误很难发现。应该特别注意指针教学,高效应用指针,发挥C语言的优势。

关键词: C语言 指针 函数 数组

“指针”是C语言中广泛使用的一种数据类型,运用指针编程是C语言最主要的风格之一。利用指针可以表示各种数据结构,它与函数、数组的使用和传递数据有密切联系,能方便地访问数组,还能像汇编语言一样处理内存地址,从而编出精致而高效的程序。指针极大地强化了C语言的功能。学习指针是学习C语言最重要的一环,能否正确理解和使用指针是判断是否掌握了C语言的重要标志。但是指针也是C语言最危险的特性,如果使用不当,则很容易指到意想不到的地方,产生错误也很难发现。因此,对于初学者来说,应特别注意指针的应用。怎样才能应用好指针呢?下面笔者以在计算机C语言教学中的体会与大家进行探讨。

一、理解指针

在C语言中任何数据只要定义了,在内存中就是有一定的存储单元的。存储单元就是变量在计算机中的存储地址,指针就是用来表示这些地址的变量。所以简单地说,指针就是地址,变量的指针就是变量的地址,这里还涉及一个概念就是指针变量,所谓指针变量就是用来存放指针(地址)的变量。例如:int a;假设a的地址是2000,而2000又存储在变量point中,那么变量point就是指针的变量简称指针变量,a就是指针变量所指向的变量。很多初学者都存在这样的误区:既然指针放的是地址,而2000正好是变量a的地址,那么对于指针point就可以这样赋值:point=2000,这是错误的,这里的2000表示的不是地址是一个整型数据。所以对于指针变量的赋值只能用取地址运算符“&”进行赋值即:point=&a;&a即为a的地址。

二、指针与函数

指针作为C语言的精华有很多用途,除具有一般的功能外,其中具体特殊功能的应用总结起来有三个方面:一是用于在函数中可以返回多个值;二是可以实现动态调用函数;三是实现数组的动态定义。其中,普通变量作为函数的参数,传递的是变量的值,因此只能带回一个返回值,但在有些场合需要返回多个值,这就必须用到指针做函数的参数,因为指针作为参数传递的是地址,让实参和形参指向同一个变量的地址,N个形参所指向的变量的值改变了,N个实参的值也自然改变了,从而实现了带回多个返回值。这里举个例子,编写一个函数实现两个数从小到大输出。这个程序需要子函数实现两个数的交换,把交换后的两个值通过指针传回主函数输出,传回来的是两个值。所以普通变量做函数的参数是无法实现的,只能用指针作为函数的参数。具体实现:

子函数实现交换:

swap(p1,p2)

int *p1,*p2;

{int p;

p=*p1;

*p1=*p2;

*p2=p;

}

主程序实现调用,输出:

main()

{int a,b;

int *pointer_1,*pointer_2;

scanf(“%d,%d”,&a,&b);

point_ 1=&a;

point_2=&b;

if(a

swap(point_1,point_2);

printf(“%d,%d”,a,b);

}

由此可见,要通过函数调用得到N个返回值可以通过以下三步实现:(1)主调函数中设N个变量,用N个指针指向他们;(2)将指针变量作实参,将N个变量的地址传给形参;(3)通过形参指针变量指向的改变,改变N个变量的值。最后主调函数中就可以得到N个变量的返回值。

三、指针与数组

前面提到任何数据都有存储单元,都有指针。所以,从这个角度出发可以将指针分为:指向变量的指针、数组指针、字符指针、指向指针的指针、函数指针、结构变量的指针及文件指针,等等。其中,指向变量的指针就是存储变量的地址的,这是指针最简单的一种类型。那么一个变量有地址,一个数组有若干个元素,每个元素都有一个地址,所谓数组的指针,就是指数组的名称,实际上是指向整个数组空间的起始地址。数组元素的指针是数组元素的地址。例如:int a[10];int*p;这里的数组名a就是数组的首地址,本质上是一个指针。a[2]表示距离a指向空间向后2个位置所在空间中的存放的值,所以a[2]=*(a+2)。那么如果让p=a,p就是指向数组的指针,对于a我们可以做加减整数运算,利用它表示数组中任何数据的值。那么对于指针也可以通过加减整数运算来表示数组中的任何数据。指针变量加上或减区一个整数n表示把指针指向的当前位置向前或向后移动n个位置。具体移动的字节数和指针数组的类型在内存所占的字节数有关系,如果指针数组类型为整型,在内存中占2个字节,那么,指针p+1,实际上的地址值就是原址加2,对于数组元素来说就是指针向后移动一个元素。如int a[10],*p,*s;p=a;s=p+2;其中s的值表示数组中首地址向后移动2个数组元素的位置,表示a[2]对应的地址,而具体移动的字节数则为4个字节。为了表示两个地址间存在的距离,可以通过指针间的减法实现。指针之间是不能有加法操作的,指针的加减运算只能对数组指针变量进行,对指向其他类型的变量的指针变量做加减运算是毫无意义的。而且两个指针变量之间的运算只有指向同一数组时它们之间才能进行运算,否则运算将失去意义。

四、结语

C语言是到目前为止学习最多的程序设计语言之一,也是国外大学计算机专业唯一的必修课程。在整个C语言教学中,指针是一个十分重要的部分,也是最难掌握的部分之一。本文从对指针概念的理解、指针在函数和数组的使用等方面系统论述了指针,目的是让大家清晰地了解指针、掌握指针,从而高效地应用指针。只有掌握好指针,才能充分发挥C语言的优势。

参考文献:

[1]谭浩强.C程序设计教程.北京:清华大学出版社,2008,11.

[2]陈刚.C语言程序设计.清华大学出版社,2010,2.

[3]魏海新,李燕.C语言程序设计实用教程.机械工业出版社,2007,7.

[4]路俊维,马雪松.C语言程序设计.中国铁道工业出版社,2009,6.

上一篇:论当下历史教师的专业发展 下一篇:如何实现高效的课堂教学