【问题标题】:Reverse order of rows in 2d array二维数组中行的倒序
【发布时间】:2021-11-30 11:13:09
【问题描述】:

我试图弄清楚如何像这样“翻转”二维数组:

{{1, 2, 3},
 {4, 5, 6},
 {7, 8, 9}}
{{7, 8, 9},
 {4, 5, 6},
 {1, 2, 3}}

搜索如何反转/翻转 2D 数组的行只返回如何反转行的内容,或者其他一些我不需要的变体

【问题讨论】:

    标签: c multidimensional-array reverse swap function-definition


    【解决方案1】:

    交换行的工作方式与交换整数完全相同,只是不需要分配内存。

    void reverseRows(size_t rows, size_t cols, int (*array)[cols])
    {
        int temp[cols];
        size_t last = rows - 1, first = 0;
    
        while(last > first)
        {
            memcpy(temp, array[first], sizeof(*array));
            memcpy(array[first++], array[last], sizeof(*array));
            memcpy(array[last--], temp, sizeof(*array));
        }
    }
    
    #define N 3
    
    int main(void)
    {
        int a[N][N] = 
        {
            { 1, 2, 3 },
            { 4, 5, 6 },
            { 7, 8, 9 }
        };
    
        for ( size_t i = 0; i < N; i++ )
        {
            for ( size_t j = 0; j < N; j++ )
            {
                printf( "%d ", a[i][j] );
            }
    
            putchar( '\n' );
        }
    
        putchar( '\n' );
    
        reverseRows(N,N,a);
    
        for ( size_t i = 0; i < N; i++ )
        {
            for ( size_t j = 0; j < N; j++ )
            {
                printf( "%d ", a[i][j] );
            }
    
            putchar( '\n' );
        }
    }
    

    https://godbolt.org/z/qxW3rG3sx

    【讨论】:

      【解决方案2】:

      你来了。

      #include <stdio.h>
      
      void swap_arrays( int *a1, int *a2, size_t n )
      {
          for ( size_t i = 0; i < n; i++ )
          {
              int tmp = a1[i];
              a1[i] = a2[i];
              a2[i] = tmp;
          }
      }
      
      int main(void) 
      {
          enum { N = 3 };
      
          int a[N][N] = 
          {
              { 1, 2, 3 },
              { 4, 5, 6 },
              { 7, 8, 9 }
          };
      
          for ( size_t i = 0; i < N; i++ )
          {
              for ( size_t j = 0; j < N; j++ )
              {
                  printf( "%d ", a[i][j] );
              }
      
              putchar( '\n' );
          }
      
          putchar( '\n' ); 
      
          for ( size_t i = 0; i < N / 2; i++ )
          {
              swap_arrays( a[i], a[N - i - 1], N );
          }
      
          for ( size_t i = 0; i < N; i++ )
          {
              for ( size_t j = 0; j < N; j++ )
              {
                  printf( "%d ", a[i][j] );
              }
      
              putchar( '\n' );
          }
      
          putchar( '\n' ); 
      
          return 0;
      }
      

      程序输出是

      1 2 3 
      4 5 6 
      7 8 9 
      
      7 8 9 
      4 5 6 
      1 2 3 
      

      【讨论】:

        猜你喜欢
        • 2013-08-17
        • 1970-01-01
        • 2020-10-07
        • 2017-05-25
        • 2012-04-03
        • 2015-09-17
        • 2017-01-19
        相关资源
        最近更新 更多