int i;Win98上のBorlandC++Builder5で上の関数を実行すると「sizeof(i) = 4」と表示されます。 つまり、int型は4バイトの大きさだということです。
printf("sizeof(i) = %d\n",sizeof(i));
int data[100];ここで気になるのが「 sizeof( data )/sizeof( data[0] ) 」。sizeofに配列変数名を渡すと、 配列変数が使用している領域のバイト数を得られるのです。data[0]はint型のデータなの で、sizeof( data[0] )はint型の変数のバイト数が入り、sizeof(data)には配列変数全体のバイト数が 入るので、 sizeof( data )/sizeof( data[0] )で配列の要素数が得られるわけです。
FILE *fp;fp = fopen( "fname" , "rb" );
:
:
fwrite( data , sizeof( data[0] ) , sizeof( data )/sizeof( data[0] ) , fp );
:
:
fclose( fp );
int data[]={1,2,3,4,5,6,7};ちゃんと「7」という数字が入っていると思います。
printf("sizeof(data)/sizeof(data[0]) = %d\n",sizeof(data)/sizeof(data[0]));
char *data[]={"hello","bye","good"};では、次のような場合はどうでしょう。
printf("sizeof(data)/sizeof(data[0]) = %d\n",sizeof(data)/sizeof(data[0]));
char *data = (char*)malloc( 100 );この場合、変数dataはchar型データへのポインタ変数となるので、sizeof(data)はポインタ 変数のバイト数を返してしまうのです。
printf("sizeof(data)/sizeof(data[0]) = %d\n",sizeof(data)/sizeof(data[0]));
free( data );