私は C でのポインターと参照をよりよく理解しようとしています。私のコースでは、例として次のプログラムを提供しました。
#include <stdio.h>
void swap(int* a, int* b);
int main(void)
{
int x = 1;
int y = 2;
swap(&x, &y);
printf("x is %i\n", x);
printf("y is %i\n", y);
}
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
主に & 対 *(逆参照) を使用する必要性に関して、何が起こっているのかをよりよく理解するのに役立つかどうかを確認するために、以下をまとめました。基本的に、int 型へのポインターを宣言する構文 (int* a) と、アスタリスクを使用して「逆参照」する構文 (*a = *b) は、私にとって非常に混乱を招きます。これは、明確にするのに役立つと私が思った上記の別のバージョンですが、実際にはそうではありません:
#include <stdio.h>
void swap(int* a, int* b);
int main(void)
{
int x = 1;
int y = 2;
int *a = &x;
int *b = &y;
swap(a, b);
printf("x is %i\n", x);
printf("y is %i\n", y);
}
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
要するに、私の質問は、これら 2 つのプログラムが行っていることの間に機能上の違いはありますか? 逆参照 ( ) と演算子 ( )*a = *b
の使用の違いは何ですか? 」.&
*a = &x