首页 理论教育C语言程序设计基础-一维数组指针

C语言程序设计基础-一维数组指针

【摘要】:当指针变量指向一维数组的首元素时,称为指向了一维数组。所以,函数中一维数组形式参数可以用同类的指针形式参数替代;同理也可以用指向特定数组的指针变量来传递数组类实际参数。特别需要注意的是,函数的形式参数无论使用的是数组名形式还是指针变量形式,本质上都是一个指针变量,在被调函数中既可以将它当作数组名使用也可以将它当作指针变量使用。

指针变量指向一维数组的首元素时,称为指向了一维数组。由于数组名表示数组的起始地址(即第一个数组元素的地址),所以,如有定义a[10],*p;,则p=&a[0]和p=a都表示相同的意义:指针变量p指向a数组的第一个元素或称为指向数组a,如图8.4所示。

图8.4 指向一维数组的指针

一个指针变量指向一个特定数组后,在指针没有移动的情况下(即指针始终指向数组的0号元素),对该数组某个元素(如i号元素)的地址和元素值而言常用3种等价的表示形式,见表8.1。

表8.1 一维数组元素地址和元素值的等价表示形式

【例8.7】 使用不同的指针形式引用一维数组元素示例。

上面程序只是为了说明表8.2中3种对应关系,程序一次执行的结果是:第一次输入数据,使用指向数组的指针:

第二次输入数据,使用数组名:

在使用指针进行数组操作时还应特别注意,虽然使用数组名和指向数组的指针变量都可以表示对应的数组元素,但它们之间有一个根本的区别:数组名是地址常量,任何企图改变其值的运算都是非法的,如有定义:int a[5],*p;,则a=p、a++等操作都是错误的;而对于指针变量,其值是可以被改变的,例如:p=a、p++、p+=3等都是有意义的操作。

函数的数组形式参数本质上就是一个指针变量,用于接收传递过来的实参数组起始地址。所以,函数中一维数组形式参数可以用同类的指针形式参数替代;同理也可以用指向特定数组的指针变量来传递数组类实际参数。特别需要注意的是,函数的形式参数无论使用的是数组名形式还是指针变量形式,本质上都是一个指针变量,在被调函数中既可以将它当作数组名使用也可以将它当作指针变量使用。

【例8.8】 使用选择排序法将一组数据按降序排列,要求被排序数组用随机函数生成,排序功能在自定义函数内进行实现,并且要求函数的数组类形式参数和函数中对数组的操作都使用指针变量形式。

数组参数传递的方法和选择法排序的基本思想在4.3和4.4小节已经讨论过,请读者参照上述知识自行分析程序执行过程,程序的一次执行结果为:

Before Sort:

7 30 259 413 552 55 761 825 366 484(www.chuimin.cn)

After Sort:

825 761 552 484 413 366 259 55 30 7