题目详情: 要求将下面的数实现倒序。
前言:
此篇面向C语言初学者,针对 数组 与 指针 作参数的练习。
正文:
代码实现:
方法一:(数组名作实参 数组作形参)
#include<stdio.h>
int main() {
void inv(int x[],int n); //inv函数声明
int i,a[10]= {3,7,9,11,0,6,7,5,4,2};
printf("The original array:\n");
for(i=0; i<10; i++)
printf("%d ",a[i]); //输出未交换时数组各元素的值
printf("\n");
inv(a,10); //调用inv函数,进行交换
printf("The array has been inverted:\n");
for(i=0; i<10; i++)
printf("%d ",a[i]); //输出交换后数组各元素的值
printf("\n");
return 0;
}
void inv(int x[],int n) { //形参x是数组名
int temp,i,j,m=(n-1)/2;
for(i=0; i<=m; i++) {
j=n-1-i;
temp=x[i];x[i]=x[j];x[j]=temp; //把x[i]和x[j]交换
}
}
方法二:{数组名作实参 指针做形参)
#include<stdio.h>
int main() {
void inv(int x[],int n);
int i,a[10]= {3,7,9,11,0,6,7,5,4,2};
printf("The original array:\n");
for(i=0; i<10; i++)
printf("%d ",a[i]);
printf("\n");
inv(a,10);
printf("The array has been inverted:\n");
for(i=0; i<10; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
void inv(int *x,int n) { //形参x是指针变量
int *p,temp,*i,*j,m=(n-1)/2;
i=x;
j=x+n-1;
p=x+m;
for(; i<=p; i++,j--) {
temp=*i; //
*i=*j; //
*j=temp; //把*x和*j交换
}
return;
}
方法三:(用指针变量作实参 指针做形参)
#include<stdio.h>
int main() {
void inv(int *x,int n); //inv函数声明
int i,a[10]= {3,7,9,11,0,6,7,5,4,2};
int *p=a; //指针变量p指向arr[0]
for(i=0; i<10; i++,p++)
p=a[i];
printf("The original array:\n");
for(i=0; i<10; i++) //输出a数组的元素
printf("%d ",a[i]);
printf("\n");
p=a; //指针变量p重新指向a[0]
inv(p,10); //调用inv函数,实参p是指针变量
printf("The array has been inverted:\n");
for(p=a; p<a+10; p++)
printf("%d ",*p);
printf("\n");
return 0;
}
void inv(int *x,int n) { //定义inv函数,形参x是指针变量
int *p,temp,*i,*j,m=(n-1)/2;
i=x;
j=x+n-1;
p=x+m;
for(; i<=p; i++,j--) {
temp=*i;
*i=*j;
*j=temp;
}
return;
}
总结:
运算结果: