今日复习——数组逆置

//逆置数组
#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种方式

猜你喜欢

转载自blog.csdn.net/qq_43345339/article/details/84962961