1. ホーム
  2. c

[解決済み] C言語でのポインタ:アンパサンドとアスタリスクはいつ使うのか?

2022-03-14 22:21:40

質問

ポインターを使い始めたばかりで、少し戸惑っています。私は知っています & は変数のアドレスを意味し * は、ポインター変数の前で使用すると、ポインターが指すオブジェクトの値を取得することができます。しかし、配列や文字列を扱うときや、変数のポインタコピーを使って関数を呼び出すときは、状況が違ってくる。このように、論理のパターンを見出すのは難しい。

どのような場合に &* ?

解決方法は?

ポインタと値を持っている。

int* p; // variable p is pointer to integer type
int i; // integer value

でポインタを値に変換します。 * :

int i2 = *p; // integer i2 is assigned with integer value that pointer p is pointing to

で値をポインタに変換します。 & :

int* p2 = &i; // pointer p2 will point to the address of integer i

編集する 配列の場合、ポインタと非常によく似た扱いを受けます。 ポインタとして考えると * を使用して中の値を取得する方法もありますが、より一般的な方法として [] 演算子を使用します。

int a[2];  // array of integers
int i = *a; // the value of the first element of a
int i2 = a[0]; // another way to get the first element

2番目の要素を取得する。

int a[2]; // array
int i = *(a + 1); // the value of the second element
int i2 = a[1]; // the value of the second element

そのため [] インデキシング演算子は * 演算子で、次のように動作します。

a[i] == *(a + i);  // these two statements are the same thing