LoginSignup
2
1

More than 5 years have passed since last update.

配列へのポインタ?ポインタの配列??

Posted at

参考

プログラミング言語C 第2版
付録A8.宣言

配列へのポインタ

int (*foo)[5];

分解すると、
declaration-specifiers : int
init-declarator-list : (*foo)[5]

ここではdeclaration-specifiersはtype-specifierをひとつだけ含みそれがint

init-declarator-listはひとつのinit-declaratorからなり、さらにそれはひとつのdeclaratorからなる
それが(*foo)[5]

declarator : (*foo)[5]をさらに分解すると、
direct-declarator[ constant-expression ]
→( declarator )[ constant-expression ]
→( pointer direct-declarator )[ constant-expression ]
→( pointer identifier )[ constant-expression ]
の形になっており、
pointer : *
identifier : foo
constant-expression : 5

括弧でpointerとidentifierが結び付けられているので
「fooはポインタ」であり、
最終的に、
identifierfooの型名は、
「整数からなる5個の配列へのポインタ」
となる。

ポインタの配列

int *bar[5];

同様に分解すると
type-specifier pointer identifier[ constant-expression ]
の形になり、ここで、
pointer identifider[ constant-expression ]
の部分は先ほどと違い、
identifier[ constant-expression ]がdirect-declaratorであるので、
「barは5個の配列」であり、
最終的に、
identifierbarの型名は、
「整数のポインタからなる5個の配列」
となる。

2
1
0

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