文字列宣言における配列とポインタ: char a[] と char *p
C プログラミングでは、宣言と文字列宣言の間に区別があります。文字列を操作する場合は、文字配列と文字ポインタ。あなたが言及した構文、「char a[] = string;」および「char *p = string;」この違いを示します。
配列バージョン: char a[] = string
この構文は、文字の配列 'a' を宣言します。そのサイズは、収容できるように自動的に決定されます。文字列リテラル「string」。配列は、ヌル終端文字を含む文字列の文字で初期化されます。配列のサイズはコンパイル時に判明するため、「sizeof」演算子を使用してその長さを決定できます。配列内の文字は後で変更できます。
ポインター バージョン: char *p = string
この構文は、文字列を指すポインター 'p' を宣言します。リテラルの「文字列」。これは配列バージョンよりも高速なアプローチですが、「p」が指す文字はメモリの読み取り専用部分に存在するため、その文字を変更することは禁止されています。このような文字列リテラルを変更すると、未定義の動作が発生します。
C での非推奨とベスト プラクティス
C では、'const' キーワードなしで文字列リテラルを使用することは非推奨になりました。ポインター バージョンの推奨される宣言は次のとおりです。
const char *p = "string";
さらに、ポインターが指す文字列のサイズを決定するために 'sizeof' を使用することは避けてください。代わりに、「strlen()」関数を使用してください。
配列とポインタの選択
配列とポインタのどちらを使用するかの選択は、シナリオによって異なります。
C に関する注意
この区別は C に固有です。 C には適用されません。 C では、文字列リテラルは「const」なしで使用できますが、文字列リテラルを変更すると動作は未定義のままです。 C では、この使用法は不正です。
以上がC の Char 配列と Char ポインタ: 文字列に `char a[]` と `char *p` を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。