ホームページ  >  記事  >  バックエンド開発  >  C の `char*` と `char[]` の違いは何ですか?

C の `char*` と `char[]` の違いは何ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-27 04:47:02629ブラウズ

 What's the Difference between `char*` and `char[]` in C?

char* と char[] の違いを理解する

C プログラミングで文字配列とポインタを扱うときは、 char str[] = "Test"; の基本的な違いおよび char *str = "Test";.

char str[] = "Test";

この宣言では、str は文字 (char) の配列を表します。固定サイズで、文字列「Test」の内容で初期化されます。配列は独自のメモリを所有し、元の文字列リテラルとは異なります。 str を変更すると、「Test」文字列自体ではなく、データのローカル コピーが変更されます。

char *str = "Test";

ここでは、strはポインタ、具体的には文字列リテラル「Test」の最初の文字へのポインタです。ポインタには、この文字のメモリ アドレスが格納されます。ただし、str は文字列が格納されるメモリを所有していないことを覚えておくことが重要です。代わりに、読み取り専用 (const) 文字列リテラルを指します。したがって、str が指す文字列を変更しようとすると、未定義の動作が発生します。

主な違い:

  1. 所有権: char[] 配列は独自のデータを所有しますが、char* ポインターは別のエンティティが所有するデータを参照します。
  2. 可変性: char[] 配列は変更できますが (新しい値を割り当てるなど)、char * ポインタは不変リテラルを指し、ポインタが指すデータの変更は未定義です。
  3. メモリ割り当て: char[] 配列はスタック上のローカル メモリを割り当てますが、char* ポインタは参照できますリテラルやその他の割り当てられたメモリを含む、プログラム内の任意の場所のメモリ。
  4. サイズ決定: char[] 配列のサイズはコンパイル時に固定されますが、char[] 配列のサイズはコンパイル時に固定されます。 char* ポインタは、データ自体または外部メモリの割り当てによって決定されます。

以上がC の `char*` と `char[]` の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。