-1

と呼ばれる目的のcにポインターがあります:

 int *binary[20] ;

後でポインターとして返されます。

私はそれに番号を割り当てようとしているとき:

binary[5]=1;

エラーが発生します。

binary20個のセルの最初のセルのアドレスを指していることはわかっています。セル番号 5 に直接入ることができないのはなぜですか?

4

3 に答える 3

1

この定義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いくつかの整数に を割り当てることは、一般的なケースでは完全に受け入れられます。

于 2013-02-11T10:27:05.640 に答える
0

整数へのポインターの配列を宣言しました。あなたのタイプはint *です。

タイプを に変更すると、次のintように動作します。

int binary[20];
binary[5] = 1;

ところで、Q は Objective-C とは何の関係もありませんが、C とは何の関係もありません。Objective-C では、可能な限りオブジェクトを操作することをお勧めします。(NSArrayおよびNSValue)。

于 2013-02-11T10:26:50.987 に答える
0

ポインターの配列を宣言しました。

これは、その配列に 20 個のメモリ アドレスを格納できることを意味します。

しかし、binary[5]=1; あなたはintのアドレスではなく、それに整数を格納することに結びついています。

静的な値のようにアドレスを保存することはできません。

于 2013-02-11T10:21:40.087 に答える