2016-08-23 18 views
0

配列にコピーする方法:私はこのような配列を定義した

uint8_t brightnesstable[] = brightnessvariants[index][]; 

しかし、それdoesnの:私は4つのアレイの1つで別の配列を埋めるために持っている自分のアプリケーションのための今すぐ

uint8_t brightnessvariants[4][101]={{1,2,...},{3,4,...},{5,6,...},{7,8,...}}; 

を仕事はありません。 インデックス

は、どのように私は右のそれを行うことができますはextern としてヘッダファイルに定義されています3.

brightnesstablebrightnessvariantsに0からカウントされますか?

+0

なぜこれをやりたいですか? – EOF

+0

ループを使用してサブアレイの内容にアクセスし、各値を新しい配列にコピーするだけです。 –

+2

@johnelemans: 'memcpy'の何が問題なのですか? – Olaf

答えて

1

は単に

uint8_t brightnesstable[101]; 
memcpy(brightnessstable, brightnessvariants[index], 101*sizeof(uint8_t)); 

brightnessvariants[index]を行う(index+1)nth行の最初の項目のアドレスであり、あなたがコピーするバイト数が ROWSIZE*sizeof(ITEM_SIZE)です。

+0

提案する 'memcpy(brightnessstable、 brightnessvariants [index]、brightofstableのサイズ); ' – chux

1

本当に何が必要かによって異なります。 brightnessvariantsの行の複製のために別のストレージを作成する必要がある場合は、別の配列を宣言して、コメントと他の答えで説明した値をコピーするだけです。

ただし、現在の有効範囲でbrightnessvariantsの行の1つにアクセスするだけであれば、別々のストレージとコピーは必要ありません。必要なのは、ポインタを宣言して目的の行の開始アドレスを割り当てるだけです。次に、別の配列であるかのように、brightnessvariantsの目的の行にアクセスできます。例えば

uint8_t brightnessvariants[4][101] = {{0}}, *btable = NULL; 

の上、btable(あなたbrightnesstableの略)単にuint8_tポインタです。 brightnessvariantsのいずれかの行のアドレスを割り当てることができます。例えば第二行の

btable = brightnessvariants[1]; 

btableは、それが別の配列であるかのように、第二列内の任意の値にアクセスするために使用することができます。

$ ./bin/ptrtobtable 

brightnesstable[0] : 

    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 37 38 39 40 
    41 42 43 44 45 46 47 48 49 50 
    51 52 53 54 55 56 57 58 59 60 
    61 62 63 64 65 66 67 68 69 70 
    71 72 73 74 75 76 77 78 79 80 
    81 82 83 84 85 86 87 88 89 90 
    91 92 93 94 95 96 97 98 99 100 
101 

brightnesstable[1] : 

    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 37 38 39 40 41 42 
    43 44 45 46 47 48 49 50 51 52 
    53 54 55 56 57 58 59 60 61 62 
    63 64 65 66 67 68 69 70 71 72 
    73 74 75 76 77 78 79 80 81 82 
    83 84 85 86 87 88 89 90 91 92 
    93 94 95 96 97 98 99 100 101 102 
103 

brightnesstable[2] : 

    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 37 38 39 40 41 42 43 44 
    45 46 47 48 49 50 51 52 53 54 
    55 56 57 58 59 60 61 62 63 64 
    65 66 67 68 69 70 71 72 73 74 
    75 76 77 78 79 80 81 82 83 84 
    85 86 87 88 89 90 91 92 93 94 
    95 96 97 98 99 100 101 102 103 104 
105 

brightnesstable[3] : 

    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 
    37 38 39 40 41 42 43 44 45 46 
    47 48 49 50 51 52 53 54 55 56 
    57 58 59 60 61 62 63 64 65 66 
    67 68 69 70 71 72 73 74 75 76 
    77 78 79 80 81 82 83 84 85 86 
    87 88 89 90 91 92 93 94 95 96 
    97 98 99 100 101 102 103 104 105 106 
107 

ルック物事を超える

#include <stdio.h> 
#include <stdint.h> 

int main (void) { 

    uint8_t brightnessvariants[4][101] = {{0}}, *btable = NULL; 
    int nrows = sizeof brightnessvariants/sizeof *brightnessvariants; 

    for (int i = 0; i < 101; i++) { 
     brightnessvariants[0][i] = i + 1; 
     brightnessvariants[1][i] = i + 3; 
     brightnessvariants[2][i] = i + 5; 
     brightnessvariants[3][i] = i + 7; 
    } 

    for (int i = 0; i < nrows; i++) { 
     printf ("\nbrightnesstable[%d] :\n\n", i); 
     btable = brightnessvariants[i]; 
     for (int j = 0; j < 101; j++) { 
      if (j && j % 10 == 0) putchar ('\n'); 
      printf (" %3hhu", btable[j]); 
     } 
     putchar ('\n'); 
    } 

    return 0; 
} 

使用例/出力やご質問があれば私に知らせてください:ここでは役立つかもしれない短い例です。ポインタの代わりにコピーの例が必要な場合は、私に知らせてください。私は助けてくれると嬉しいです。

関連する問題