0

ポインター文字列を使用すると、他の文字に初期化できますが、一度文字列を定義すると、他の文字に初期化することはできません。その理由は何ですか??

int main()
{
char str1[]="hello";
char *p="hello";
str1="bye";/*error*/
p="bye";/*works*/
}
4

3 に答える 3

1

配列として定義str1しましたが、配列は代入できません。

ただし、他のデータを配列にコピーすることはできます。次に例を示します。

char str1[] = "hello";

strcpy(str1, "bye");
于 2012-07-08T08:19:01.050 に答える
0

あなたがしていることなどの配列内の文字を変更するには、次のような関数を使用するstrcpyか、インデックスごとにインデックスを作成する必要があります。

str1[0] = 'p';

印刷しますpello

あなたがやろうとしていることは、C 言語ではサポートされていません。

于 2012-07-08T08:19:06.667 に答える
0

配列は配列であり、ポインターはポインターです。配列を定義すると、割り当てられた配列へのポインターが与えられます。これは、配列スペースが予約されている場所への定数ポインターです。これは、lifo スタック内の具体的なアドレスです。したがって、str1 は定数ポインター値であり、変更することはできません。別の定数文字列のアドレスの値を設定することはできません。

ポインターを char*p として定義すると、アドレスの変数値が得られます。したがって、変数 p の値を変更できます。

于 2012-07-08T08:23:25.540 に答える