1

次の関数プロトタイプがあるとします。

void function1(char str[]);
void function2(char *str);

ここでchar name[] = "John";、これらの関数を通過させたい文字列があるとします。2つの違いは何ですか?それらの用途と制限は何ですか? どちらかが優先される状況はありますか? 代わりに文字列が として初期化された場合、違いはありますchar *name = "John"か?

char str[]関数内での使用と関数内での使用の違いは理解してchar *strいますが、関数のパラメーターまたは引数としての動作はわかりません。

4

3 に答える 3

4

Cにはまったく違いはありません

void function1(char str[]);
void function2(char *str);

は、引数として関数に渡されると にchar str[]単純に還元されるためです。また、レコードについては、関数がそれを と見なすのとまったく同じです。char *char str[20]char *str

文字列が次のように初期化された場合に違いが生じるかどうかについては、

char *name = "John";

はい、そうです!ここでは、その文字列のアドレスがJohnポインターに割り当てられてnameおり、後で別のアドレスを再割り当てできますname

char *name="John";
name="Mary";  //Works in C

しかし、

char name[]="John";

文字配列オブジェクトname を に初期化してJohnいます。ここでの違いは、初期化後に別の文字列を再割り当てできないことですname。C では、次のように誤りがあります。

char name[]="John";
name="Mary";// Wrong

質問を投稿する際に、フォーラムを 1 分間検索して、その質問が既に回答されているかどうかを確認してください。あなたの質問の最初の部分は何度も尋ねられ、非常によく回答されています。2 番目の部分については本当に混乱しているように見えたので、私は答えました。ここで。

于 2013-04-28T01:36:24.457 に答える
4

違いはありません。パラメーター リスト 内では、フォームT[]およびのパラメーターは、コンパイラーによってT[n]サイレントに書き換えられます。T*これは、配列を値で渡すことができないことを意味します。

于 2013-04-27T23:52:20.320 に答える
1

技術的な観点からの違いはありません。ただし、 [] を使用すると、コードを読んでいる人が配列を期待していることを文書化しています。

于 2013-04-27T23:52:44.320 に答える