如何在C中反转多维数组



我需要反转一个2d数组,这个数组是用指针表法制作的。

要清楚,如果数组是

A B C D E
F G H I J
K L M N O
我需要

:

E D C B A
J I H G F
O N M L K

我的代码:

#include <stdio.h>
#include <stdlib.h>
#define HEIGHT 3
#define WIDHT 7
void print (char *imprimir)
{
    int i,j;
    for (i=0;i<HEIGHT;i++)
    {
        for (j=0;j<WIDHT;j++)
        {
            printf ("%2c",*(imprimir+(i*WIDHT)+j));
        }
        printf ("n");
    }
}
int main()
{
    //FILLING THE ARRAY
    char *array=malloc(WIDHT*HEIGHT);
    int i,j;
    for (i=0;i<HEIGHT;i++)
    {
        for (j=0;j<WIDHT;j++)
        {
            *(array+(i*WIDHT)+j)=(i*WIDHT)+j+'a';
        }
    }
    print (array);  
    //TRYING TO REVERSE IT
    char *tmp=malloc(WIDHT);
    for (i=0;i<HEIGHT;i++)
    {
        for (j=0;j<WIDHT/2;j++);
        {
            *tmp=*(array+(i*WIDHT)+j);
            *(array+(i*WIDHT)+j)=*(array+(i*WIDHT)+(WIDHT-j));
            *(array+(i*WIDHT)+(WIDHT-j))=*tmp;
        }
    }
    printf ("PRINTING RESULT!n");
    print (array);  
}

你有两个错误

  1. 在你的内部for循环的末尾有一个分号;,所以循环根本没有运行。
  2. 如果你有WIDTH - j,你应该换成WIDTH - 1 -j,因为最高指数是WIDTH - 1

此外,人类确实关心拼写,所以我将WIDHT全局更改为WIDTH以提高可读性。

这是固定的代码。

#include <stdio.h>
#include <stdlib.h>
#define HEIGHT 3
#define WIDTH 7
void print (char *imprimir)
{
    int i,j;
    for (i=0;i<HEIGHT;i++)
    {
        for (j=0;j<WIDTH;j++)
        {
            printf ("%2c",*(imprimir+(i*WIDTH)+j));
        }
        printf ("n");
    }
}

int main ()
{
    //FILLING THE ARRAY
    char *array=malloc(WIDTH*HEIGHT);
    int i,j;
    for (i=0;i<HEIGHT;i++)
    {
        for (j=0;j<WIDTH;j++)
        {
            *(array+(i*WIDTH)+j)=(i*WIDTH)+j+'a';
        }
    }
    print (array);  
    //TRYING TO REVERSE IT
    char tmp;
    for (i=0;i<HEIGHT;i++)
    {
        for (j=0;j<WIDTH/2;j++)
        {
            tmp=*(array+(i*WIDTH)+j);
            *(array+(i*WIDTH)+j)=*(array+(i*WIDTH)+(WIDTH - 1 -j));
            *(array+(i*WIDTH)+(WIDTH - 1 -j))=tmp;
        }
    }
    printf ("PRINTING RESULT!n");
    print (array);  
}

至少是字符串for (j=0;j<WIDHT/2;j++);中的错误因为你不想在那里有一个空循环,对吧?下面是你的代码:

    #include <stdio.h>
    #include <stdlib.h>
    #define HEIGHT 3
    #define WIDHT 7
    void print (char *imprimir)
    {
        int i,j;
          for (i=0;i<HEIGHT;i++)
        {
            for (j=0;j<WIDHT;j++)
            {
                printf ("%2c",*(imprimir+(i*WIDHT)+j));
            }
            printf ("n");
        }
    }

    int main ()
    {
        //FILLING THE ARRAY
        char *array=malloc(WIDHT*HEIGHT);
        int i,j;
        for (i=0;i<HEIGHT;i++)
        {
            for (j=0;j<WIDHT;j++)
            {
                *(array+(i*WIDHT)+j)= (i*WIDHT)+j+'a';
            }
        }
        print (array);  
        //TRYING TO REVERSE IT
        char *tmp=malloc(WIDHT);
        for (i=0;i<HEIGHT;i++)
        {
            for (j=0;j<WIDHT/2;j++)
            {
                *tmp=*(array+(i*WIDHT)+j);
                *(array+(i*WIDHT)+j)=*(array+(i*WIDHT)+(WIDHT-j-1));
                *(array+(i*WIDHT)+(WIDHT-j-1))=*tmp;
            }
        }
        printf ("PRINTING RESULT!n");
        print (array);  
}

相关内容

  • 没有找到相关文章

最新更新