文字列リテラルのサイズ: 違いを解明する
次のコード スニペットを考えてみましょう。
#include <iostream> using namespace std; int main() { const char* const foo = "f"; const char bar[] = "b"; cout << "sizeof(string literal) = " << sizeof("f") << endl; cout << "sizeof(const char* const) = " << sizeof(foo) << endl; cout << "sizeof(const char[]) = " << sizeof(bar) << endl; }
このコードを実行すると、次のことがわかります。興味深いresults:
sizeof(string literal) = 2 sizeof(const char* const) = 4 sizeof(const char[]) = 2
結果の理解
文字列リテラル型解釈
sizeof は文字列リテラルに必要なスペースを計算しますが、その基になる型は変更しません。文字列リテラルは引き続き「const char のサイズ N の配列」型を持ちます。N は終端の null 文字を表します。
配列とポインターの動作
配列が sizeof に渡されたときにポインターに分解されないことに注意することが重要です。これは、sizeof(bar) が配列へのポインターのサイズではなく、配列自体のサイズを返すことを意味します。
結論
要約すると、sizeof(" f") は、NULL 文字を含む文字列リテラルに必要なスペースを返します。ただし、sizeof(foo) と sizeof(bar) は、関係する型の違いにより動作が異なります。 C プログラミングで文字列リテラルを扱う場合、これらのニュアンスを理解することが不可欠です。
以上が文字列リテラルの「sizeof」、「const char* const」、および「const char[]」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。