一般我们求一个数组倒着输出,经常会采用下列方法
#include<stdio.h> #include<stdlib.h> void instead (int x[],int n) { int i,j,t; for(i=0,j=n-1;i<=j;i++,j--) { t=x[i]; x[i]=x[j]; x[j]=t; } } int main() { int i,a[10]={0,1,2,3,4,5,6,7,8,9}; instead(a,10); printf("The array has been reverted: "); for(int i=0;i<10;i++) { printf("%d ",a[i]); } printf(" "); }
但是当你学了指针之后,你就自己动手将他弄一下,试试行不行,巩固一下。
一、介绍第一种,现在开始showtime
1 #include<stdio.h> 2 #include<stdlib.h> 3 void instead (int *x,int n)//将数组a的首地址付到这 4 { 5 int *i,*j,*p,t,m=(n-1)/2;//i、j表示将要访问数组a中元素的地址并进行改变(倒置数组a) 6 i=x;j=x+n-1;p=x+m;//将数组a的首地址和末位置给了i,j 7 for(;i<=p;i++,j--) 8 { 9 t=*i; 10 *i=*j; 11 *j=t; 12 } 13 } 14 int main() 15 { 16 int i,a[10]={0,1,2,3,4,5,6,7,8,9}; 17 instead(a,10); 18 printf("The array has been reverted: "); 19 for(int i=0;i<10;i++) 20 { 21 printf("%d ",a[i]); 22 } 23 printf(" "); 24 }
二、再提供第二种
#include<stdio.h> #include<stdlib.h> void instead (int *x,int n) { int *i,*j,*p,t,m=(n-1)/2; i=x;j=x+n-1;p=x+m; for(;i<=p;i++,j--) { t=*i; *i=*j; *j=t; } } int main() { int i,a[10],*p=a;//将数组a的地址存放到指针里,单独一个字母a表示数组a的地址。 for(i=0;i<10;i++,p++)//将指针移动分别给数组a赋值。 { scanf("%d",p); } p=a;//将p调回到a数组的首地址。 instead(p,10); printf("The array has been reverted: "); for(int i=0;i<10;i++) { printf("%d ",a[i]); } printf(" "); }
三、再来第三种表示方式
#include<stdio.h>
#include<stdlib.h>
void instead (int x[],int n)
{
int i,j,m=(n-1)/2,t;
for(i=0,j=n-1;i<=j;i++,j--)
{
t=x[i];
x[i]=x[j];
x[j]=t;
}
}
int main()
{
int i,a[10],*p=a;
for(i=0;i<10;i++,p++)
{
scanf("%d",p);
}
p=a;//将p调回到a数组的首地址。
instead(p,10);
printf("The array has been reverted:
");
for(int i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("
");
}
这几个只是栗子,随便看看就行啦。