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.