//逆置数组
#include<stdio.h>
void f(int *a , int n)//逆置函数声明
{
int *p, *q;
int t;
p=a;
q=a+n-1;
for(;p<q;p++,q--)
{
t=*p;
*p=*q;
*q=t;
}
}
int main()
{
int a[100];
int n;
int i ;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
f(a,n);
for(i=0;i<n;i++)
{
if(i==0)
printf("%d",a[i]);
else printf(" %d",a[i]);
}
return 0;
}
注:上面输入数组是用下标进行输入的,除此以外还可以采用以下两种方法
1.改变指针变量的指向
//逆置数组
#include<stdio.h>
void f(int *a , int n)//逆置函数声明
{
int *p, *q;
int t;
p=a;
q=a+n-1;
for(;p<q;p++,q--)
{
t=*p;
*p=*q;
*q=t;
}
}
int main()
{
int a[100];
int n;
int i ;
int *p;
p=a;
scanf("%d",&n);
for(;p<(a+n);p++)
{
scanf("%d",p);
}
f(a,n);
for(i=0;i<n;i++)
{
if(i==0)
printf("%d",a[i]);
else printf(" %d",a[i]);
}
return 0;
}
2.由数组名计算地址
//逆置数组
#include<stdio.h>
void f(int *a , int n)//逆置函数声明
{
int *p, *q;
int t;
p=a;
q=a+n-1;
for(;p<q;p++,q--)
{
t=*p;
*p=*q;
*q=t;
}
}
int main()
{
int a[100];
int n;
int i ;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",a+i);
}
f(a,n);
for(i=0;i<n;i++)
{
if(i==0)
printf("%d",a[i]);
else printf(" %d",a[i]);
}
return 0;
}
//第二种法中不能把a+i改成a++,因为a是指针常量不能改变
同理:输出时也有3种方式