一般我們求一個數組倒着輸出,經常會采用下列方法
#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:\n"); for(int i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); }
但是當你學了指針之后,你就自己動手將他弄一下,試試行不行,鞏固一下。
一、介紹第一種,現在開始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:\n"); 19 for(int i=0;i<10;i++) 20 { 21 printf("%d ",a[i]); 22 } 23 printf("\n"); 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:\n"); for(int i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); }
三、再來第三種表示方式
#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:\n");
for(int i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
這幾個只是栗子,隨便看看就行啦。