我有兩個陣列:一個 2D,arr,另一個 1D,ar,例如像這樣:
int arr[1][18]; int ar[18];
我想將 arr[1][18] 復制到 ar[18]“不使用回圈”。我怎樣才能做到這一點?如果有人能解釋這一點,我將不勝感激。非常感謝提前...
uj5u.com熱心網友回復:
如果您不想使用回圈,則可以改用該函式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];
uj5u.com熱心網友回復:
ar[0] = arr[0][0];
ar[0] = arr[0][1];
ar[0] = arr[0][2];
ar[0] = arr[0][3];
ar[0] = arr[0][4];
ar[0] = arr[0][5];
ar[0] = arr[0][6];
ar[0] = arr[0][7];
ar[0] = arr[0][8];
ar[0] = arr[0][9];
ar[0] = arr[0][10];
ar[0] = arr[0][11];
ar[0] = arr[0][12];
ar[0] = arr[0][13];
ar[0] = arr[0][14];
ar[0] = arr[0][15];
ar[0] = arr[0][16];
ar[0] = arr[0][17];
XD
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514913.html
標籤:数组C循环二维转移
