このコードでは:
const char * str = "hello world";
私が正しく理解していれば、ポインタは4バイトまたは8バイトであり、スタックに割り当てられると思います。しかし、「helloworld」のメモリはどこに割り当てられて保存されているのでしょうか。
またはstr
、正確には何を指しますか?
このコードでは:
const char * str = "hello world";
私が正しく理解していれば、ポインタは4バイトまたは8バイトであり、スタックに割り当てられると思います。しかし、「helloworld」のメモリはどこに割り当てられて保存されているのでしょうか。
またはstr
、正確には何を指しますか?
割り当てられていません。通常、プログラムのコードセグメントまたはスタックに格納されます。これはコンパイラ次第です。いずれにせよ、それはnullで終了する文字の配列を指します。
Cにはスタックまたはヒープがありません。Cは、それ"hello world"
が文字列リテラルであり、文字列リテラルには静的な保存期間があることを示しています。
本質的に、それはあなたが書いたかのようにコンパイルされます:
const static char helloworld[12]
= {'h', 'e', 'l', 'l', 'o',' ','w', 'o', 'r', 'l', 'd', '\0'};
const char * str = helloworld;
配列は通常、メモリの読み取り専用セクション、おそらく実行可能コードの近くに配置されます。
定義されている場所に応じて、strはスタックまたはグローバルメモリスペースに配置されます。