次に、下記のような代入文を考えてみましょう。この中には、好ましくない使用方法がありますが、それはどれでしょうか。int *ptr, i; ptr = i; /** (1) **/ ptr = &i; /** (2) **/ *ptr = i; /** (3) **/ *ptr = &i; /** (4) **/
- (1)は、通常の変数 i の値をポインタ変数に代入しています。 ptr の値は本来アドレスである必要があり、このような利用方法は好ましく ありません(ポインタ変数の値と通常の変数の値は区別すべきです)。 ポインタ変数はアドレスとしての制約された値しかとれません。
- (2)は、通常の変数 i のアドレスをポインタ変数 ptr に代入しています。 これは正しい使い方です。
- (3)は、通常の変数 i の値をポインタ変数 ptr が指すアドレスのメモリ 領域に代入しています。 これは正しい使い方です。
- (4)は、 変数 i のアドレスをポインタ変数 ptr が指すアドレスのメモリ 領域に代入しています。 *ptr は通常の値が入るべき場所なので、 アドレスの値を入れるのは好ましくありません。