たまに書くとき、混乱する上にググりにくいポインタ宣言の構文についてメモ.
Cの勉強でとても腹がたったのが、int *p
とint* p
の違いがわからんところ。微妙に使い分けている風でありつつも、同じように使えているような。
結論からいうとどちらも同じ。
ptr
// 型 変数名の順で宣言するのでこちらがわかりやすい。
int* p;
// ただし、こう書いても良い。
int *p;
僕も前者のほうが絶対わかりやすいと思うんだけど、あんま見ないのはなんか良くない現象とか起きるのかな。Cの教本とかだと後者の書き方をよく見るきがする。
宣言と代入のまとめ
#include <stdio.h>
int main()
{
/* {intへのポインタ}型でpを宣言 */
int* p;
/* int型でxを宣言 */
int x = 20;
/* 変数pに、アドレス演算子&を使ってint型のxへのアドレスを代入 */
p = &x;
/* 間接演算子*を使い、変数pが指し示す先の値を取り出す */
printf("%d", *p);
}
教本だと、よく以下のように書いてある気がする
int x = 10;
int *p = &x;
printf("%d", *p);
初学者が、型宣言時の*p
と、ポインタの先を参照する時の*p
は全然違う意味を持っているということを__その後の文書で解説されたとしても__理解するのは難しいと思うんだけどな。
しかしこの誤解を呼ぶクソ構文さえ理解しちゃえば、そんなに難しいもんでもないのかも。