2

私は C プログラミング言語で書かれたプロジェクトに取り組んでいます。以下のようなコードスニペットを取得しました

unsigned char value[10];
#define arr() (&value[0])

unsigned char 配列に対して"function"( arr()) のような'd 変数を定義したのはなぜですか?#define

彼らは変数arr()[1],arr()[2]などを使用しようとしています。

  1. arr() + 2に等しいですvalue + 2。小さなプログラムを実行してみましたが、これらの 2 つの結果から異なる答えが得られました。どのようにそれが可能です。最初の配列のアドレスを に割り当てているためarr()です。この二つは同じではないでしょうか?

上記のように変数を定義することの重要性を説明できる人はいますか?

4

4 に答える 4

1

この行#define arr() (&value[0])は、プリプロセッサ (コンパイラの前に実行される) が遭遇するたびarr()に、ファイル内のそれを(&value[0]).

そうarr()[1]意味し(&value[0])[1]ます。value[0]value の最初のインデックスに格納されているものであり、&そのアドレスを再度取得します...これは value と同じです。したがってvalue[1]、何かが欠けていない限り、それは全体的なものでなければなりません。

于 2013-03-27T05:18:08.050 に答える
1

arr()[i]==> (&value[0])[i]==>value[i]

また

arr() + i ==> (&value[0]) + i ==>value + i

そう

arr() + 2 ==> (&value[0]) + 2 ==>value + 2

この例のように、プログラマーがこの方法でコーディングをヒストコードの他の部分と統一するために書いていると推測することしかできません

于 2013-03-27T05:18:45.540 に答える
1

彼らがなぜそれをしたのかはわかりませんが、そうです、arr() + 2そしてvalue + 2同じことです.

于 2013-03-27T05:16:33.623 に答える
1

arr() + 2 は value + 2 に等しいです。小さなプログラムを実行してみましたが、これら 2 つの結果から異なる答えが得られました。どのようにそれが可能です。最初の配列のアドレスを arr() に割り当てているためです。この二つは同じではないでしょうか?

はい、それらは同じです。

このプログラムを試す

#include <stdio.h>

#define arr() (&value[0])

int main(void)
{

unsigned char value[11] = "0123456789";
printf("arr()[2] = %c\n",  arr()[2] );
printf("arr()+ 2 = %c\n",*(arr() + 2) );
printf("value+ 2 = %c\n",*(value + 2) );

return 0;
}
于 2013-03-27T05:32:32.517 に答える