LoginSignup
36

More than 5 years have passed since last update.

混乱を招くポインタ宣言の構文についてメモ

Posted at

たまに書くとき、混乱する上にググりにくいポインタ宣言の構文についてメモ.

Cの勉強でとても腹がたったのが、int *pint* 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は全然違う意味を持っているということをその後の文書で解説されたとしても理解するのは難しいと思うんだけどな。
しかしこの誤解を呼ぶクソ構文さえ理解しちゃえば、そんなに難しいもんでもないのかも。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36