c - 2d数组中行的反向顺序



我正在想办法如何"翻转";一个像这样的二维数组:

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

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

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

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

给你。

#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 

最新更新