编写程序,以指针的方式,就地逆置一维数组。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据先输入数据个数n,然后输入n个整数。

输出格式:

对于每组测试,在一行上输出逆置之后的结果。数据之间以一个空格分隔。

样例">输入样例:

2
4 1 2 5 3
5 4 3 5 1 2

输出样例:

3 5 2 1
2 1 5 3 4

不懂是指针的话可以理解一下这个,这是题目的常规做法: 

#include <stdio.h>
int main()
{
    int a,b=0,c=0,p[100],d,e,m;
    scanf("%d",&a);
    for(;b<a;b++){
        scanf("%d",&m);
        for(c=0;c<m;c++){
            scanf("%d",&p[c]);
        }
        for(c=0,d=m-1;c<m/2;c++,d--){
                    e=p[d];//一定要除以2,不然没变化
                    p[d]=p[c];
                    p[c]=e;
        }
        for(c=0;c<m;c++){
            if(c==0){
				printf("%d",p[c]);
			}
			else{
            printf(" %d",p[c]);}
        }
        printf("\n");
    }
    return 0;
 } 

这是题目的指针做法(数组指针):

#include <stdio.h>
int main()
{
    int a,b=0,c=0,d,e,m;
    scanf("%d",&a);
    for(;b<a;b++){
        scanf("%d",&m);
        int p[m];
        int (*k)[m];//数组指针 
        k=&p;//p交地址给k指针 
        for(c=0;c<m;c++){
            scanf("%d",&p[c]);
        }
      
        //用指针代替数组运算 
         for(c=0,d=m-1;c<m/2;c++,d--){//c<m/2中的m一定要除以2,不然没变化
                    e=(*k)[d];
                    (*k)[d]=(*k)[c];
                    (*k)[c]=e;
        }
        for(c=0;c<m;c++){
            if(c==0){
				printf("%d",p[c]);
			}
			else{
            printf(" %d",p[c]);}
        }
        printf("\n");

    }
    return 0;
 } 

最后: 

第一个代码是我以前没注意看是用指针写的,反正对了我就没理了

新学期,又来了很多人学习C语言,看到那么多人都搜到了我这一题,我感觉就不好意思了,特地赶回来写一下标准的答案,给予你们借鉴。

2022.11.28

最近抽出点时间,本来想改进的,想了想之后,我觉得这样已经很好了

首先呢,这道题指针的话,其实本意是让咱们熟悉一下指针,并不要求必须用指针, 

指针在我看来,主要在数据结构方面,比较复杂的情况才用到,比如顺序表,链表,树等等之类,其中的插入删除操作是用指针操作的,不必因为这道题,而感觉指针很难理解,下次这种情况用非指针方式写出来即可,指针只是不适合这个情况,肯定也写得出,就是比非指针方式更加麻烦,加油。

2023.4.13

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐