C言語のポインターで星印の有無は何が違うのか
C言語では、ポインタにアスタリスク(*)を付けるか付けないかの違いは宣言での位置と用途である。
- この声明のどこにあるか
- 声明内で変数名の前にアスタリスク(*)を付けると、変数がポインタ変数になり、メモリアドレスが格納されます。
- アスタリスクがない場合は、その変数が普通の変数であることを示します。
- 使用目的:
- アスタリスク(*)を使用することでポインタの参照解除が可能で、ポインタが指すメモリアドレスの内容にアクセスできます。
- アスタリスクをつけずに使えば、通常の変数そのものを参照する。
たとえば
int a = 10; // 声明一个普通变量a,值为10
int *ptr = &a; // 声明一个指针变量ptr,存储a的内存地址
printf("%d\n", a); // 输出10
printf("%d\n", *ptr); // 输出通过指针访问a的值,即10
printf("%u\n", &a); // 输出a的内存地址
printf("%u\n", ptr); // 输出ptr存储的内存地址
上掲の例では、変数aは通常変数であり、ポインタptrを通してaの値にアクセスするには、逆参照演算子*を使用する必要があります。ポインタ変数ptrを宣言するときは、変数名の前にアスタリスク(*)を追加して、変数がポインタ変数であることを示す必要があります。