2024年10月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
無料ブログはココログ

 

« 今日届いた本 | トップページ | ネタを集める時間もありゃしない。 »

2009年10月23日 (金)

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関数は、引数を配列として宣言したら、ポインタのアドレスが渡るのか配列が渡るのか、配列なら実体なのかコピーなのかを見るためにつけてみました。
ポインタなんやね。この形で宣言する意味はあまりないのかもしれない。

« 今日届いた本 | トップページ | ネタを集める時間もありゃしない。 »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: C言語:sizeof演算子について:

« 今日届いた本 | トップページ | ネタを集める時間もありゃしない。 »