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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.95395 の関連記事表示

<< 0 >>
■95395  Re[2]: string配列を関数に渡したい
□投稿者/ ぶなっぷ -(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 になります。
    
記事No.95392 のレス /過去ログ165より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -