C语言程序将n个数按输入时顺序的逆序排列,用函数实现。 1、在调用函数时,用数组名作为函数实参。 2、函数实参改为用指向数组首元素的指针,形参不变。 3、分析以上两者的异同。
时间: 2024-05-05 10:20:44 浏览: 143
[例]数组做函数参数的递归调用-函数、预处理
方法1:用数组名作为函数实参
```c
#include <stdio.h>
#define MAX 100
void reverse(int arr[], int n){
int temp;
for(int i=0; i<n/2; i++){
temp = arr[i];
arr[i] = arr[n-1-i];
arr[n-1-i] = temp;
}
}
int main(){
int n, arr[MAX];
printf("请输入元素个数n:");
scanf("%d", &n);
printf("请输入%d个数:\n", n);
for(int i=0; i<n; i++){
scanf("%d", &arr[i]);
}
reverse(arr, n);
printf("逆序排列后的结果为:\n");
for(int i=0; i<n; i++){
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
方法2:用指向数组首元素的指针作为函数实参
```c
#include <stdio.h>
#define MAX 100
void reverse(int *arr, int n){
int temp;
for(int i=0; i<n/2; i++){
temp = *(arr+i);
*(arr+i) = *(arr+n-1-i);
*(arr+n-1-i) = temp;
}
}
int main(){
int n, arr[MAX];
printf("请输入元素个数n:");
scanf("%d", &n);
printf("请输入%d个数:\n", n);
for(int i=0; i<n; i++){
scanf("%d", &arr[i]);
}
reverse(arr, n);
printf("逆序排列后的结果为:\n");
for(int i=0; i<n; i++){
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
以上两种方法都可以实现将n个数按输入时顺序的逆序排列,但是它们的函数实参的方式不同。
方法1中,函数的实参是数组名,而方法2中,函数的实参是指向数组首元素的指针。实际上,数组名在传递给函数时会被转换成指向数组首元素的指针,因此这两种方法本质上是相同的。
但是,指针作为函数实参的优点在于可以方便地对数组进行动态分配,这在处理大型数组时非常有用。同时,指针也可以方便地进行指针运算,因此在某些场景下也更加方便。
阅读全文