C言語:sizeof演算子について
sizeof演算子について一つ。
sizeof演算子は、単純変数(char,intやlongなど)とか複合変数(構造体)とかのデータ型の大きさ調べるのに使う。
大体、sizeofに渡すものは、データ型(char,int,longや構造体)や変数を入れる。
んで、オイラは近頃、知ったのだけれど、実は配列もOKなのだ。
ま、ポインタに入れちゃうと、その変数の大きさ、つまりアドレス長が返ってきてしまうので、配列変数を渡す様にしないとだめなんだけどね。
void func1(char arg[])
{
printf("func1 arg=%s sizeof=%d &arg=0x%8x\n", arg, sizeof(arg), arg);
}
int _tmain(int argc, _TCHAR* argv[])
{
char cTest1[10];
char cTest2[] = {'1','2','3','4','5','\0'};
char cTest3[] = "1234567";
char *pcTest4 = cTest2;
cTest1[0] = '\0';
printf("cTest1=%s sizeof=%d\n", cTest1, sizeof(cTest1));
printf("cTest2=%s sizeof=%d\n", cTest2, sizeof(cTest2));
printf("cTest3=%s sizeof=%d\n", cTest3, sizeof(cTest3));
printf("pcTest4=%s sizeof=%d\n", pcTest4, sizeof(pcTest4));
printf("cTest2=%s sizeof=%d &cTest2=0x%8x\n", cTest2, sizeof(cTest2), cTest2);
func1(cTest2);
return 0;
}
この出力結果が、以下。
cTest1= sizeof=10
cTest2=12345 sizeof=6
cTest3=1234567 sizeof=8
pcTest4=12345 sizeof=4
cTest2=12345 sizeof=6 &cTest2=0x002cfa9c
func1 arg=12345 sizeof=4 &arg=0x002cfa9c
ウチのvaio type P上でVisual C++ 2008で動かしてみました。
func1関数は、引数を配列として宣言したら、ポインタのアドレスが渡るのか配列が渡るのか、配列なら実体なのかコピーなのかを見るためにつけてみました。
ポインタなんやね。この形で宣言する意味はあまりないのかもしれない。
« 今日届いた本 | トップページ | ネタを集める時間もありゃしない。 »
コメント