sizeof [C++]
sizeofの使い方。
型のサイズ
サイズオブの引数に型名を書くことをよく目にするが、変数の型が変えられるとsizeofの記述もなおさないといけないので修正漏れを引き起こすかもしれない。
struct Point{
int X;
int Y;
int Z;
};
Point p1;
memset( &p1, 0, sizeof(Point) );
↓
struct Point {
int X;
int Y;
int Z;
};
struct Point2 {
int X;
int Y;
};
Point2 p1;
memset( &p1, 0, sizeof(Point) ); // ここでやらかしそう
そうならないためにはと型名ではなく、変数そのものを指定するとよい。
memset( &p1, 0, sizeof(p1) );
変数がポインタのとき
ポインタの場合、実体のサイズがほしいのならポインタ演算子を付ければよい。つけなければポインタ変数のサイズになる。
Point *p1;
int iSize1 = sizeof(p1); // ポインタのサイズが返る。ポインタ=32bitで、4バイト。
int iSize2 = sizeof(*p1); // 実態のサイズが返る。int = 4バイトで、12バイト。
変数が配列のとき
Point aP[10];
memset( aP, 0, sizeof(aP) );
配列のサイズを知るには、
int iArraySize = sizeof(aP) / sizeof(aP[0]);
と記述することができる。ポインタに対しては無理(そりゃそうだ)。
型のサイズ
サイズオブの引数に型名を書くことをよく目にするが、変数の型が変えられるとsizeofの記述もなおさないといけないので修正漏れを引き起こすかもしれない。
struct Point{
int X;
int Y;
int Z;
};
Point p1;
memset( &p1, 0, sizeof(Point) );
↓
struct Point {
int X;
int Y;
int Z;
};
struct Point2 {
int X;
int Y;
};
Point2 p1;
memset( &p1, 0, sizeof(Point) ); // ここでやらかしそう
そうならないためにはと型名ではなく、変数そのものを指定するとよい。
memset( &p1, 0, sizeof(p1) );
変数がポインタのとき
ポインタの場合、実体のサイズがほしいのならポインタ演算子を付ければよい。つけなければポインタ変数のサイズになる。
Point *p1;
int iSize1 = sizeof(p1); // ポインタのサイズが返る。ポインタ=32bitで、4バイト。
int iSize2 = sizeof(*p1); // 実態のサイズが返る。int = 4バイトで、12バイト。
変数が配列のとき
Point aP[10];
memset( aP, 0, sizeof(aP) );
配列のサイズを知るには、
int iArraySize = sizeof(aP) / sizeof(aP[0]);
と記述することができる。ポインタに対しては無理(そりゃそうだ)。
Facebook コメント