6

重複の可能性:
c ++の文字列リテラルは静的メモリで作成されていますか?
C++文字列リテラルデータ型ストレージ

このコードでは:

const char * str = "hello world";

私が正しく理解していれば、ポインタは4バイトまたは8バイトであり、スタックに割り当てられると思います。しかし、「helloworld」のメモリはどこに割り当てられて保存されているのでしょうか。
またはstr、正確には何を指しますか?

4

3 に答える 3

16

割り当てられていません。通常、プログラムのコードセグメントまたはスタックに格納されます。これはコンパイラ次第です。いずれにせよ、それはnullで終了する文字の配列を指します。

于 2013-01-22T21:54:22.630 に答える
6

Cにはスタックまたはヒープがありません。Cは、それ"hello world"が文字列リテラルであり、文字列リテラルには静的な保存期間があることを示しています。

于 2013-01-22T21:53:36.757 に答える
6

本質的に、それはあなたが書いたかのようにコンパイルされます:

const static char helloworld[12] 
             = {'h', 'e', 'l', 'l', 'o',' ','w', 'o', 'r', 'l', 'd', '\0'};

const char * str = helloworld;

配列は通常、メモリの読み取り専用セクション、おそらく実行可能コードの近くに配置されます。

定義されている場所に応じて、strはスタックまたはグローバルメモリスペースに配置されます。

于 2013-01-22T22:06:21.990 に答える