回答受付が終了しました

ID非公開

2021/10/17 20:13

33回答

C言語のポインタについて基本的なことを本で読んだのですが、認識が合ってるのか教えて欲しいです。

C言語関連118閲覧xmlns="http://www.w3.org/2000/svg">25

回答(3件)

0

概ねいいと思いますが、 > そしてポインタとはこのときのaを指す言葉である この言い回しは変ですね。 ポインタとは、ポインタ型の変数のことを言います。 aはポインタ型の変数なので、ポインタですが、 ポインタはa、というのは変です。 変数の種類を表している言葉、と考えて良いでしょう。 「整数」「浮動小数点数」「構造体」などの用語と同じカテゴリに属します。 int a; とあったとして、 aは整数と言いますが、 整数はa、というのが変な感じと似ています。 「整数とはこのときのaを指す言葉である」って変ですよね。 逆です。 「aは整数」

0

C言語のポインタは、メモリアドレスを記録する変数と考えるのが一番わかり易いです。 int i=100; として100という整数を保持する様に、 int *p=100; とした場合、100というメモリアドレスを保持します。 その上で、ポインタ変数には、他の変数に無い2つの機能があります。 1つは間接参照。 間接参照演算子を用いることで、保持した値のアドレスに書かれているデータを、 その元となった型を当てはめて読み書きする事が可能です。 例にある a=&b としてbのアドレスを代入しておくと、bの存在するアドレスを読み書きする事ができる。 結果的にbの内容を間接的には読み書きできるのは、この仕組みによるものです。 たまに、この事をbの別名になると説明している物もありますが、 別にポインタにそのような機能はありません。 aとbは別の存在です。 もう一つの機能は、ポインタ演算です。 ポインタ変数に対しては、通常の変数とは違い、加算と減算しか行なえません。 そして、それらが行われる時には、元となった型のサイズを考慮して演算が行われます。 int *p1 = 100; char *p2 = 100; では、 p1++ p2++ の2つの結果の値は異なります。 (p1は、102もしくは104もしくは108 p2は、101になります。) これを使って、ポインタの値をどんどん移動させるのは、C言語では頻繁に使われます。 (配列の要素アクセスも同じ仕組みで動いています) これが、C言語のポインタの便利な所であり、危険な所でもあります。

ID非公開

質問者2021/10/17 22:38

イメージ的にはbの別名でも実際は間接的に読み書きしているんですね

0

ポインタはaではなく、aの値がポインタ。 aはポインタ変数。