0

testingで構造を初期化する関数を呼び出すとき、私には要件があります0。しかし、関数ex()が呼び出された瞬間ab、構造体のオブジェクトにはabcガベージが含まれます。しかし、構造 abc を で初期化する必要があります0

function にアクセスできないためですex()。したがって、設定する必要があるものは何でも、から設定する必要がありmain()ます。

struct abc{
    int a[4];
};
void ex()
{
abc ab;
    printf("%d\n", ab.a);//Garbage value
}
int main()
{
    abc ab;
    memset(&ab, 0, sizeof(abc));
    printf("%d\n", ab.a);
return 0;
}

助けてください。

4

3 に答える 3

3

abc配列の要素を に初期化するデフォルトのコンストラクターを指定できます0。これにより、ガベージ値が取り除かれます。

struct abc {
    int a[4];
    abc() : a() {}
};

次に、で作成しmyexた のデータを印刷する場合は、参照パラメーターを指定します。これは の C++11 バージョンです:abcmainabcmyex

#include <iostream>

void myex(const abc& item)
{
  for (const auto& n : item.a)
  {
    std::cout << n << " ";
  }
  std::cout << "\n";
}

int main()
{
  abc myabc;
  myex(myabc);
}
于 2013-01-16T12:00:09.100 に答える
2

abinexは in とは異なるオブジェクトabですmain。一方を初期化しても他方には影響しません。

と の両方でab同じオブジェクトを参照する場合は、次のいずれかを実行する必要があります。mainex

  • fromabに引数として渡します。exmain
  • abファイル スコープで宣言します (exまたはの外側main)。
于 2013-01-16T13:40:07.330 に答える
1

構造定義を次のように変更します。それは世話をします

struct abc{
  int a[4];

  abc()
  { memset(a, 0, 4*sizeof(int)); }
};
于 2013-01-16T12:00:48.290 に答える