4

以前は主に .NET でプログラミングを行っていたので、ポインタなどについて特に心配する必要はありませんでしたが、最近は Objective-C を使い始め、メモリの仕組みを完全に理解しようと決心しました。管理。

したがって、最初に言いたいのは、int のポインターを作成するべきではないということです。これは、効率には役立たないためですが、これは主に好奇心からの実験です。

整数ポインターを次のように作成した場合: int *intPointer; 実際には、ポインターが指しているメモリの場所が割り当てられるのはなぜですか。

intPointer = 43;

私が理解しているように、そのようなアクションはポインターの実際のメモリアドレスを変更するべきではありませんか?

次のコードについても同様です。

int *intPointer;
int integer;

integer = 43;
intPointer = integer;

同じ結果ですが、CLLocationCoordinate2D で作業していて、ポインターが CLLocationCoordinate2D 変数を指すようにしようとしたとき、実際には次のようにする必要がありました。

CLLocationCoordinate2D *coordinatePointer = &coordinate;

私にはどちらが正しい方法のようです。

これは、stackoverflow に関する私の最初の投稿であり、回答が得られたことを願っています。ありがとうございました!

4

3 に答える 3

2
intPointer = integer;

これは、暗黙的な変換のためにのみ機能します。ポインターは単なるメモリオフセットであり、数値であるため、int から割り当てることができます (これについてコンパイラの警告が表示されるはずです)。

CLLocationCoordinate2D の場合、構造体をポインターに変換できないため、コンパイラーはエラーを報告します。と書くと、ポインタを代入できる&coordinate変数への参照が与えられます。coordinate

于 2013-07-07T01:28:31.847 に答える
1

機能しているという最初の仮定は間違っています。

intPointer = 整数;

変数「整数」に 10 を格納すると、intPointer にコピーされます。したがって、*intPointer を使用して intPointer から値を取得しようとすると、メモリ 10 に格納されている値が返されます。しかし、これを行うと:

intPointer = &整数;

そうして初めて、整数のメモリが intPointer.Then に格納されます。後でこれを行うと、次のようになります。

整数 = 60;

*intPointer も 60 を返します。つまり、intPointer は整数のメモリ アドレスを持つため、整数を指します。

于 2013-07-07T01:38:54.580 に答える
0

あなたが尋ねた質問は、単純な C ポインターに関するものでした。Objective-C は追加機能を備えた C です (追加機能を備えた C++ である Objective-C++ もあります)。Xcode でコードを記述する場合、コンパイラが与える警告と、これらの警告をエラーとして扱うかどうかを決定できます。最低の警告設定では、コンパイラは絶対に受け入れてはならないコードを受け入れます。あなたの例では

int *intPointer;
int integer;

integer = 43;
intPointer = integer;

2 番目の割り当ては、コンパイラの正常なビルド設定ではコンパイルされません (ただし、コンパイルするようにビルド設定を設定することは可能かもしれません。どのような警告が表示されたかを確認してください)。これを行う適切な方法は次のようになります

intPointer = &integer;

intPointer = integer をコンパイルするようにコンパイラに指示すると、数値 43 がポインタとして解釈されます。メモリ位置 43 には適切なものが格納されている可能性が非常に高いため、intPointer を使用して int の読み取りまたは書き込みを行うと、クラッシュする可能性が最も高くなります。intPointer = &integer は、変数 "integer" のアドレスを取得し、ポインター intPointer に格納します。これで、「intPointer」の値は整数のアドレスになり、*intPointer の値は「integer」の内容である 43 になります。

次のステップは、Objective-C オブジェクトについて学習することです。

于 2014-03-22T14:05:12.957 に答える