メモリ割り当てに関して、これら 2 つの違いは何ですか。
char *p1 = "hello";
char p2[] = "hello";
ベストアンサー1
最初のものはポインタ変数(プラットフォームに応じて4バイトまたは8バイトのストレージ)に格納され、位置2番目のものは文字列リテラルを作成します。配列6 文字 (ゼロ文字列終端バイトを含む) の文字列を作成し、そこにリテラルをコピーします。
リテラルが であるため、最初の行でコンパイラの警告が表示されるはずですconst
。
メモリ割り当てに関して、これら 2 つの違いは何ですか。
char *p1 = "hello";
char p2[] = "hello";
最初のものはポインタ変数(プラットフォームに応じて4バイトまたは8バイトのストレージ)に格納され、位置2番目のものは文字列リテラルを作成します。配列6 文字 (ゼロ文字列終端バイトを含む) の文字列を作成し、そこにリテラルをコピーします。
リテラルが であるため、最初の行でコンパイラの警告が表示されるはずですconst
。