如何在不使用C中的Loop的情况下将2D阵列转换为1D阵列



我有两个数组:一个是2D,arr,另一个是1D,ar,例如:int arr[1][18]; int ar[18];我想把arr[1][18]复制到ar[18]"而不使用循环"&";。我该怎么做?如果有人能解释一下,我将不胜感激。提前非常感谢。。。

如果不想使用循环,可以使用函数memcpy

#include <stdio.h>
#include <string.h>
int main( void )
{
//declare and initialize the 2D array
int arr_2D[2][18] = {
{  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18 },
{ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36 }
};
//declare the 1D array
int arr_1D[18];
//copy arr_2D[1] to arr_1D (without a loop)
memcpy( arr_1D, arr_2D[1], sizeof *arr_2D );
//print the result of the copy (in a loop)
for ( int i = 0; i < 18; i++ )
{
printf( "%d ", arr_1D[i] );
}
printf( "n" );
}

该程序具有以下输出:

19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 

如您所见,arr_2D[1]在没有循环的情况下成功复制到arr_1D。循环仅用于打印结果。

然而,值得注意的是,memcpy很可能在内部使用某种循环。因此,即使代码没有循环,从技术上讲,您仍然在使用循环。如果没有某种循环,就没有办法解决这个问题,除非展开循环,比如:

arr_1D[0]  = arr_2D[1][0];
arr_1D[1]  = arr_2D[1][1];
arr_1D[2]  = arr_2D[1][2];
arr_1D[3]  = arr_2D[1][3];
arr_1D[4]  = arr_2D[1][4];
arr_1D[5]  = arr_2D[1][5];
arr_1D[6]  = arr_2D[1][6];
arr_1D[7]  = arr_2D[1][7];
arr_1D[8]  = arr_2D[1][8];
arr_1D[9]  = arr_2D[1][9];
arr_1D[10] = arr_2D[1][10];
arr_1D[11] = arr_2D[1][11];
arr_1D[12] = arr_2D[1][12];
arr_1D[13] = arr_2D[1][13];
arr_1D[14] = arr_2D[1][14];
arr_1D[15] = arr_2D[1][15];
arr_1D[16] = arr_2D[1][16];
arr_1D[17] = arr_2D[1][17];

最新更新