• ベストアンサー

関数に配列を渡した場合にサイズが

C言語初心者です。 以下のように関数に配列を渡した場合、サイズが変わってしまうのは何故でしょうか。 #include "stdafx.h" void fanc(char [3]); int _tmain(int argc, _TCHAR* argv[]) { char a[] = {'a','b','c'}; printf("%d\n",sizeof(a)); // aのサイズ 3 fanc(a); return 0; } void fanc(char b[]){ printf("%d\n",sizeof(b)); // bのサイズ 4 }

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

関数の引数としては、配列ではなく、配列の先頭アドレスをポインタとして渡すことになっています。 sizeofはポインタの大きさになって、配列の大きさにはなりません

miyaneya0
質問者

お礼

回答有難う御座いました。

その他の回答 (1)

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

gdbで覗いてみたとおり、fancの変数bはアドレスなので、32ビットシステムの場合4バイトを返します。 Breakpoint 2, fanc (b=0x22cd00 "abc") at byteorder.c:13 13 printf("%d\n",sizeof(b)); (gdb) p b $3 = 0x22cd00 "abc" 値を参照するためには、*bやb[0]を用います。 (gdb) p *b $5 = 97 'a' (gdb) p b[0] $6 = 97 'a'

miyaneya0
質問者

お礼

回答有難う御座いました。

関連するQ&A