No.15256![]() |
sizeofの使用について 投稿者---naru(2004/07/06 00:53:08) |
||
こんばんわnaruといいます。 sizeofを使った実行結果について質問があります。 下記はソースです。 #include <stdio.h> typedef struct student { /*学籍データの構造体*/ char name[40]; /*姓名*/ unsigned int student_num; /*学籍番号*/ char gender; /*性別*/ unsigned int age; /*年齢*/ char address[200]; /*住所*/ }; int main(void){ printf("sizeof(int)=%d\n",sizeof(int)); /* intの所有するバイト数 */ printf("sizeof(double)=%d\n",sizeof(double)); /* doubleの所有するバイト数 */ printf("sizeof(long double)=%d\n",sizeof(long double)); /* long doubleの所有す るバイト数 */ printf("sizeof(struct student)=%d\n",sizeof(struct student)); /* struct studen tの所有するバイト数*/ printf("sizeof(int *)=%d\n",sizeof(int *)); /* int *の所有するバイト数*/ printf("sizeof(double *)=%d\n",sizeof(double *)); /* double *の所有するバイト 数*/ printf("sizeof(long double *)=%d\n",sizeof(long double *)); /* long double *の 所有するバイト数 */ printf("sizeof(struct student *)=%d\n",sizeof(struct student *)); /* struct stu dent * の所有するバイト数 */ return 0; } この実行結果は次のようになりました。 ------------------------------------------------------- sizeof(int)=4 sizeof(double)=8 sizeof(long double)=12 sizeof(struct student)=252 sizeof(int *)=4 sizeof(double *)=4 sizeof(long double *)=4 sizeof(struct student *)=4 --------------------------------------------- sizeof(int)=4 sizeof(double)=8 sizeof(long double)=12 sizeof(struct student)=252 の部分は、おのおのの所有するバイト数を表示している。と理解ができたのですが、 sizeof(int *)=4 sizeof(double *)=4 sizeof(long double *)=4 sizeof(struct student *)=4 の部分はおのおののアドレスを表示することとなると理解しました。しかし、どうしてこれらのアドレスが全て同じであるのか理解ができませんでした。C言語を勉強し始めての3ヶ月でなかなかうまく進んでいません。もし、よろしければ教えて頂けないでしょうか?? |
No.15257![]() |
Re:sizeofの使用について 投稿者---RAPT(2004/07/06 01:24:55) |
||
それはアドレスではない。「ポインタ変数」のサイズ。 あくまで、sizeof演算子はサイズを返す演算子。 |
No.15259![]() |
Re:sizeofの使用について 投稿者---naru(2004/07/06 01:29:57) |
||
>それはアドレスではない。「ポインタ変数」のサイズ。 >あくまで、sizeof演算子はサイズを返す演算子。 そうですか、ついポインタ演算子が付いているのでアドレスであると思い込んでいました。ご指摘ありがとうございました。 |
No.15258![]() |
Re:sizeofの使用について 投稿者---Fanta(2004/07/06 01:25:47) |
||
こんばんは。 >sizeof(int)=4 >sizeof(double)=8 >sizeof(long double)=12 >sizeof(struct student)=252 > >の部分は、おのおのの所有するバイト数を表示している。と理解ができたのですが、 と理解しているのに、 >sizeof(int *)=4 >sizeof(double *)=4 >sizeof(long double *)=4 >sizeof(struct student *)=4 > >の部分はおのおののアドレスを表示することとなると理解しました。 なぜこれらをアドレス表示と思われたのでしょうか? こちらも同じくバイト数を表示しているだけです。 4つとも型が違いますが、全てポインタであるので、4バイトであるということです。 |
No.15260![]() |
Re:sizeofの使用について 投稿者---naru(2004/07/06 01:35:23) |
||
>>の部分はおのおののアドレスを表示することとなると理解しました。 > >なぜこれらをアドレス表示と思われたのでしょうか? >こちらも同じくバイト数を表示しているだけです。 >4つとも型が違いますが、全てポインタであるので、4バイトであるということです。 回答ありがとうございます。ついポインタ演算子に目が行ってしまい、ポインタ=アドレスと勝手に思い込んでいました。きちんとsizeofの使い方を理解しようと思います。 |