2012-05-12 4 views
2

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

+2

が定義できないので、一定のポインタである配列、Xを意味ポインタでありますchar x [] = "xxxxxxxx"としてください。あなた自身も同じ質問をする...ヒント: '\ 0'を終了する –

+1

@MitchWheat彼はxが5文字であることを理解していると思う。問題は、yはポインタなのでsizeof(y)= 4(バイト)です。 – mgiuffrida

+0

@eli:はい、私はそれを知っています。しかし、私は直接の答えを与えたくなかった。魚を釣る人を教えてください.... –

答えて

4

アレイタイプのサイズは、アレイが占有するサイズです。 sizeof("xxxx")と同じです。

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

8

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

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

4

xは、実際には"xxxx\0"です。文字列の末尾にあるnulターミネータは、配列に5バイトを与えます。

ただし、sizeof(y)は、ポインタのサイズを要求しています。これは、場合によっては4バイトになります。 yが指しているのは、sizeof()には何の影響もありません。 char *xについて

0

は、Xは、変更することができる尖った-するx++x+=2によって位置等 char x[]であるあなたは、X ++

関連する問題