C のポインタ: アンパサンドとアスタリスクはいつ使用すればよいですか? 質問する

C のポインタ: アンパサンドとアスタリスクはいつ使用すればよいですか? 質問する

ポインタを使い始めたばかりで、少し混乱しています。 は&変数のアドレスを意味し、*ポインタ変数の前で使用して、ポインタが指すオブジェクトの値を取得できることは知っています。しかし、配列や文字列を操作している場合や、変数のポインタコピーを使用して関数を呼び出している場合は、動作が異なります。これらすべての中でロジックのパターンを把握するのは困難です。

&とはいつ使用すればよいですか*?

ベストアンサー1

ポインタと値があります:

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 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

おすすめ記事