4

char* と char[] の違いを知っています。 char x[] = "xxxx" 文字の配列です。 char *y = "xxxx" リテラル (const) 文字列へのポインタです。そしてx[4]=='\0'、そして*(y+4) == '\0'あまりにも。sizeof(x)==5では、なぜsizeof(y)==4ですか?

4

4 に答える 4

10

char x[] = "xxxx"xxxx と \0 を含むサイズ 5 の配列です。

char *y = "xxxx"文字列へのポインタです。長さは 4 バイトです。これは、文字列ではなくポインタの長さであるためです。

于 2012-05-12T02:22:27.320 に答える
4

配列型のサイズは、配列が占めるサイズです。と同じsizeof("xxxx")

ポインター型のサイズは、ポインター自体が占めるサイズです。と同じsizeof(char*)

于 2012-05-12T02:22:46.087 に答える
4

xは本当に"xxxx\0"。文字列の末尾にあるヌル ターミネータは、配列に 5 バイトを与えます。

ただし、sizeof(y)ポインターのサイズを要求しています。これは、たまたま4バイトです。yを指しているものは、 には影響しませんsizeof()

于 2012-05-12T02:23:06.513 に答える
0

の場合char *x、x はポインターです。つまり、ポインターの位置を 、 などで変更できますx++x+=2配列 char x[]は定数ポインターであるため、x++ は実行できません。

于 2013-06-03T00:24:05.857 に答える