C言語関係掲示板

過去ログ

No.1171 sizeofの使用について

[戻る] [ホームページ]
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の使い方を理解しようと思います。