[2373] Re:ポインタ完全制覇の質問
投稿者:sasaki
2024/05/15 17:16:34
お世話になっております。
また質問をさせてください。(2つあります)
本書P210の【超重要!!】で「int a[]がint *aと同じ意味になるのは、唯一、関数の仮引数の宣言の場合だけ」
という所を読み、2つ実験をしてみて疑問に思った内容の質問です。
①前回ご教示頂いた内容の私なりの解釈では、グローバル変数などの静的変数は初期化しなかった場合、
算術型の変数は0で初期化されると理解しました。
であれば、int a[]も関数外で宣言することにより、プログラマが初期化しなくてもグローバル変数
として自動的に初期化され、JIS X 3010:2003「6.7.8 初期化」のc)d)の合わせ技により、配列内に
少なくとも一つは0が代入され、int a[] = {0};と同義になるのではと思い、関数外であればint a[];
を宣言できるのではと考え、試しに関数外に宣言してみたのですがコンパイルエラーになりました。
前述【超重要!!】の内容はやはり正しいとして、今回私が疑問に思い行った実験は初期化の考え方が
間違っているのでしょうか?
②①のあとに、グローバル変数であることが重要なのではなく静的変数であることが重要なのではと考え、
試しにstatic int a[];としたら、これはコンパイルが成功しました。
これにより余計に頭がパンクしそうなのですが、静的変数であることを明示するとint a[]がint *aと同義
になるのでしょうか?
お手数ですがご教示のほどお願いいたします。