私はC++プログラムで、次の構造体を宣言した:異なるデータ型のsizeof(datatype_pointer)/ sizeof(datatype)の値が異なるのはなぜですか?
struct person {
char name[10]; /* first name */
char id[10]; /* ID number */
off_t pos; /* position in file, for demonstration */
} people[] = {
{ "arnold", "123456789", 0 },
{ "miriam", "987654321", 10240 },
{ "joe", "192837465", 81920 },
};
j = sizeof(people)/sizeof(people[0]); /* count of elements */
は、ここではJ = 3、すなわち、配列内の要素の全く与えません。いつもあなたが追加したり、要素を削減しても...
しかし
char b[8];
i = sizeof(b)/sizeof(b[0]);
は、iの値が、私のマシン上の定数= 4 =与えます。
は、今はsizeof(人*)、とすぐに私は、構造体の人物を宣言としてはsizeof(char型*が)私のマシン上で一定であるとはsizeof(charは)あまりにも一定であるよう..
を正当化のthatsしかし、 sizeof(person)も定数でなければならず、一定の値を返さなければなりません。???
私は 'char'バリアントがいつもあなたに4を与えるとは思わない...(http://ideone.com/eeniL) –
私のマシンに4を与え、コードを実行しました。 sizeof(char *)はマシン上のアドレスを格納するのに必要なバイト数に依存し、sizeof(char)は常に1です。だから、私のマシン上のアドレスに対応するためには4 * sizeof(char)が必要です。 – bhuwansahni
この投稿は、人々がなぜ完全なプログラムを投稿し、コードフラグメントでないのかを示す優れた例です。あなたの質問を示す最短の完全なプログラムを投稿してください。 http://sscce.org –