首先是数组名做函数参数的例子。
#include<stdio.h>
//数组名做参数,实际上是传递的数组的首地址
void reserve(int x[], int n);
void main (){
int a[10] = {3,7,9,11,0,6,7,5,4,2};
int i;
for (i = 0; i < 10; i++){
printf("%d\t", a[i]);
}
printf("\n");
reserve(a, 10); //作用:使数组倒序排放
for (i = 0; i < 10; i++){
printf("%d\t", a[i]);
}
printf("\n");
system("pause");
}
void reserve(int x[],int n){ //形参x是数组名
int i, j,temp, m;
m = (n - 1) / 2;
for (i = 0; i <= m; i++){
j = n - 1 - i; // 指向对应元素
temp = x[i];
x[i] = x[j];
x[j] = temp;
}
}
下面是使用指针做参数的例子。
主函数中reserve函数传递的依然是数组名a, 但是reserve函数在声明和定义时,第一个参数由数组变成了指针。主要变化还是在reserve函数调用的内部。
#include<stdio.h>
//指针变量做参数
void reserve(int *x, int n); //形参x为指针变量
void main (){
int a[10] = {3,7,9,11,0,6,7,5,4,2};
int i;
for (i = 0; i < 10; i++){
printf("%d\t", a[i]);
}
printf("\n");
reserve(a, 10); //作用:使数组倒序排放。此处传递的依然是数组名
for (i = 0; i < 10; i++){
printf("%d\t", a[i]);
}
printf("\n");
system("pause");
}
void reserve(int *x, int n){ //形参x是指针变量
int *i, *j, *p, temp, m;
m = (n - 1) / 2;
i = x; // i指向数组的第一个元素
j = x + n - 1; // j指向数组的最后一个元素
p = x + m; //指向中间,配对
for(; i <= p; i++, j--){
temp = *i;
*i = *j;
*j = temp;
}
}
两个程序运行的结果是一样的,如下图
第一行是原始的输入数据,第二行是倒序后的结果。