これとまったく同じであるために閉じられた質問を以前に読みました
関数に特定のサイズの配列パラメーターがある場合、なぜポインターに置き換えられるのですか?
と
「sizeof」(配列を指すポインター) を見つける方法は?
しかし、これを読んだ後でも、 sizeof() がどのように機能するかについてまだ混乱しています。次のような関数に引数として配列を渡すことを理解しています
void foo(int a[5])
配列引数がポインターに減衰します。上記の2つの質問リンクで見つけられなかったのは、sizeof()
関数自体がこのポインター減衰動作から免除されている(または少なくとも一見免除されているように見える)理由についての明確な答えでした。sizeof() が他の関数と同じように動作する場合
int a[5] = {1,2,3,4,5};
cout << sizeof(a) << endl;
4
の代わりに上記が出力され20
ます。これは、ポインターの動作への減衰の矛盾であるように思われるため、明らかなことを見逃しましたか??? これを再び持ち出して申し訳ありませんが、何年にもわたってこの機能をあまり考えずに喜んで使用してきたにもかかわらず、なぜこれが起こるのかを理解するのに本当に苦労しています.