0

我有一个要求,testing因为当我调用一个函数时,我用0. 但是,在函数ex()被调用的那一刻ab,struct 的对象就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打印abc创建的数据main,你应该给它一个abc参考参数。这是 C++11 版本myex

#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

abin 与 in是ex不同的对象;初始化一个不会影响另一个。abmain

如果您打算在andab中引用同一个对象,则需要执行以下操作之一:mainex

  • ab作为参数传递给exfrom main;
  • ab在文件范围内声明(在exor之外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 回答