

C++言語の初心者なのですが、  
とあるソースコードにbyte型の配列にbyte型の変数を足している箇所がありまして、  
何をしているのか見当がつきませんでした。  
以下、該当の箇所を抜粋します。

[code]

    byte arduino[8];
    memset(arduino, 0xFF, sizeof(arduino));
    byte uno = something;　//←byte型変数unoには0b000～0b111 (0～7)が入ります。
    byte *input = arduino + uno;　//←この行で何をしているのかが分かりません。
    
[/code]

解説頂ける方がいらっしゃれば良いのですが。


CC BY-SA 4.0
2018-05-06T12:35:20.053
43820
2018-05-06T14:19:01.213
2018-05-06T13:49:59.053
3605
28433
question
c++ array
C++の配列とbyte型変数の足し算？について


> byte *input = arduino + uno;

byte *input = &arduino[uno]; ですね。

arduino が配列の先頭アドレスで、そこから、 uno番目のデータアドレス。  
unoは、byteで宣言されていますが、int で十分。(byte のメリット無し)  
C++ というより、 Cじゃないかと思いますが。


CC BY-SA 4.0
2018-05-06T13:23:56.853
43821
2018-05-06T13:23:56.853
43820
answer


`byte`は標準の型ではないので、整数型だと仮定して説明します。

配列変数を単独で使用すると、その配列の先頭の要素のアドレスを返します。今回の場合、`arduino`とすれば、先頭の要素`arduino[0]`のアドレス、つまり
`&arduino[0]`を返します。

これに整数値を足すと、その値だけ配列の要素をスキップした先の要素のアドレスになります。例えば 3を足すと、先頭から
3つスキップした要素`arduino[3]`のアドレス`&arduino[3]`になります。0を足せば、何もスキップしないので`&arduino[0]`です。

今回のコード  
`byte *input = arduino + uno;`  
で`uno`に
3が入っていた場合、`input`には`&arduino[3]`が入ります。これを後で`*input`とすると、`arduino[3]`としたのと同じ効果が得られます。


CC BY-SA 4.0
2018-05-06T14:19:01.213
43823
2018-05-06T14:19:01.213
3605
43820
answer