と呼ばれる目的のcにポインターがあります:
int *binary[20] ;
後でポインターとして返されます。
私はそれに番号を割り当てようとしているとき:
binary[5]=1;
エラーが発生します。
binary
20個のセルの最初のセルのアドレスを指していることはわかっています。セル番号 5 に直接入ることができないのはなぜですか?
と呼ばれる目的のcにポインターがあります:
int *binary[20] ;
後でポインターとして返されます。
私はそれに番号を割り当てようとしているとき:
binary[5]=1;
エラーが発生します。
binary
20個のセルの最初のセルのアドレスを指していることはわかっています。セル番号 5 に直接入ることができないのはなぜですか?
この定義int* binary[20]
は、 への 20 個のポインターの配列を定義しint
ます。それは本当にあなたが望んでいることですか、それともint binary[20]
20 の配列を作成するつもりでしたint
か?
どちらの方法でも、結果の配列はスタックに格納されるため、この配列へのポインターを呼び出し元のコードに返すとエラーになります。(呼び出し元のコードに戻った後、スタックは巻き戻され、配列用に予約されたメモリは空きとしてマークされます。) 呼び出し元のコードから配列を操作する場合は、ヒープに割り当てる必要があります。
int *binary = calloc(20, sizeof(int));
binary[5] = 1; // fine, even after returning from this function
これにより、関数から戻った後でも使用できるメモリへのポインターが取得されます。(そして呼び出し元は、 を使用してそのメモリを解放する責任がありますfree
。)
とにかく、NSArray
代わりに使用する必要がある特定の要件がない限り、または同様のコレクションクラスを使用してください。Objective-C の一般的なルールは、別の方法で行う必要があるまで、可能な限り高レベルの API を使用することです。NSArray
いくつかの整数に を割り当てることは、一般的なケースでは完全に受け入れられます。
整数へのポインターの配列を宣言しました。あなたのタイプはint *
です。
タイプを に変更すると、次のint
ように動作します。
int binary[20];
binary[5] = 1;
ところで、Q は Objective-C とは何の関係もありませんが、C とは何の関係もありません。Objective-C では、可能な限りオブジェクトを操作することをお勧めします。(NSArray
およびNSValue
)。
ポインターの配列を宣言しました。
これは、その配列に 20 個のメモリ アドレスを格納できることを意味します。
しかし、binary[5]=1;
あなたはintのアドレスではなく、それに整数を格納することに結びついています。
静的な値のようにアドレスを保存することはできません。