C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■95395 / )  Re[2]: string配列を関数に渡したい
□投稿者/ ぶなっぷ (234回)-(2020/07/28(Tue) 15:35:21)
#defineマクロはコンパイル前に展開されるので、
自分で展開したコードを書いてデバッグしてみると分かります。

getLen()関数を以下のように書き換えてデバッグします。

int getLen(std::string *strArray)
{
	int ret = ARRAY_LEN(strArray);
	int ret2 = sizeof(strArray);
	int ret3 = sizeof(strArray[0]);
	return ret;
} 

ret2 の値は4, ret3の値は28であることが分かります。
(Win32, Unicodeの場合)
これでピンときますか?
ちょっと考えてみてください。

つまり、getLen()関数に渡した時点で、
  std::string arr[2]
は
  std::string* arr
に型が変わっちゃうんです。

どちらでも、strArray, strArray[0]を値としてみたときは変わりませんが、
型は変わっちゃうんです。

なので、sizeof(strArray) はポインタ変数のサイズである4を返してくるんです。

getLen()の戻り値は 4 / 28 で 0 になります。

返信 編集キー/


管理者用

- Child Tree -