2017-06-23 5 views
1

に私はArduinoのプロジェクトにCで働いていると私は、次のような状況があります。保存配列は、c

私はサイズの異なる3つのchar配列を持っている、と私はアドレスを格納したいのですがこれらの各々を第4のアレイに入れる。私はそれ以降のコードで、DATA_A、DATA_B、及びDATA_Cを変更したい、とall_dataアレイを有しているだろうので、私は文字列のそれぞれのアドレスことがこれらを必要

は依然として改変配列を指します。

unsigned char data_a[8] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; 
unsigned char data_b[3] = {0x08, 0x09, 0x0a}; 
unsigned char data_c[7] = {0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11}; 

int all_data_array_length = 3; 

unsigned char* all_data[all_data_array_length] = {&data_a, &data_b, &data_c}; 

... 

/*modify the data_a, data_b, data_c arrays */ 

... 

for(int i = 0; i<all_data_array_length; i++) { 
    /* do something with what all_data[i] points to /* 
} 

これはにつながる:私は混乱していますどこだと思い

cannot convert 'unsigned char (*)[8]' to 'unsigned char*' 

は、char *とのchar []、およびどのようにchar型の配列へのポインタを作成するの区別です。

すべてのご協力ありがとうございます。

+0

アンパサンドを削除してみます。 –

答えて

0

このライン:

unsigned char* all_data[all_data_array_length] = {&data_a, &data_b, &data_c}; 

ニーズがために:

unsigned char* all_data[all_data_array_length] = {data_a, data_b, data_c}; 

または

unsigned char* all_data[all_data_array_length] = {&data_a[0], &data_b[0], &data_c[0]}; 

&が削除されていることに注意してください)。

data_aは、タイプunsigned char[8](同様にdata_bおよびdata_c)です。 &data_aは、8個の符号なし文字の配列へのポインタであるunsigned char (*)[8]です。あなたが彼らに種類がないunsigned char*さんの配列を代入しようとすると、これは、配列がC.

でほとんどのコンテキストでその最初の要素へのポインタに変換されるためであるので、What is array decaying?When is an array name or a function name 'converted' into a pointer ? (in C)

を参照してください。一致。

+0

返信いただきありがとうございます! –

0

置き換えます

unsigned char* all_data[all_data_array_length] = {&data_a, &data_b, &data_c}; 

で:

unsigned char* all_data[3] = {&data_a[0], &data_b[0], &data_c[0]}; 
+0

ああ意味する! &data_a [0]はdata_aの最初の要素のアドレスですか?その場合、&data_aは何ですか? –

0

char *は文字または文字配列へのポインタですが、char []は配列です。例えば。 char* temp = "abc" ; ここで、 'temp'は文字ポインタであり、文字列の最初の文字のメモリ位置、つまり 'a'を指します。 char temp[] = "abc" ;ここで、「temp」は文字配列であり、すべての内容の値、つまり「abc」を保持します。

unsigned char* all_data[all_data_array_length] = {&data_a, &data_b, &data_c}; 

が文字配列へのポインタを作成するには、あなたのコードに来て、あなたがする必要があるすべては、基本的には、アレイの第一の要素を指すポインタで配列名を渡しています。コードを

unsigned char* all_data[all_data_array_length] = {data_a, data_b, data_c}; 

に変更してください。 幸運。

関連する問題