0

申し訳ありませんが、かなり無知で初心者の質問だと思います。

CGDirectDisplayID displays[10];
uint32_t numDisplays;

CGGetOnlineDisplayList(10, displays, &numDisplays);

上記の関数は、displays[] 配列に値を入力し、結果 (オンライン ディスプレイの数) を numDisplays に返します。ヘッダーの定義は次のとおりです。

CG_EXTERN CGError CGGetOnlineDisplayList(uint32_t maxDisplays,
CGDirectDisplayID *onlineDisplays, uint32_t *displayCount)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_NA);

「&numDisplays」を使用する理由は理解できます。関数に変数のアドレスを指定して、変数を直接変更できるようにしています。しかし、配列で同じオペランドを使用しないのはなぜでしょうか? numDisplays を処理するのと同じ方法で処理するべきではありませんか? 関数にアドレスを渡さない場合、関数はどのようにして配列に値を設定するのでしょうか?

4

2 に答える 2

2

関数にアドレスを渡していない場合、関数はどのように配列にデータを入力しますか?

私たちです。

配列を関数に渡す場合、渡されるのは配列の内容ではありません。代わりに、配列の最初の要素へのポインターが渡されます。配列はポインタに減衰すると言います。とにかく関数のプロトタイプからわかるように。

を渡した場合&arr、それは技術的には同じポインタになりますが、別のタイプ(ポインタから配列になりますuint32_t (*)[10])になりますが、ポインタから配列にポインタを渡すと、配列の要素)が必要ですが無効です。使用しないでください&

于 2013-03-10T19:18:57.920 に答える
1

配列は、最初の要素へのポインターに減衰します。

だから&display[0];等しいdisplays;

于 2013-03-10T19:18:50.503 に答える