一旦代码进入另一个函数,如何保留该值

时间:2013-01-16 11:55:45

标签: c++ c testing

我的testing中有一项要求,因为我在调用函数时正在使用0初始化结构。但是,当函数ex()被调用时,ab结构abc的对象会出现垃圾。 但我需要使用0初始化结构abc。

因为我无法访问功能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;
}

请帮忙。

3 个答案:

答案 0 :(得分:3)

您可以为abc提供一个默认构造函数,将数组元素初始化为0。这摆脱了垃圾值:

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

接下来,如果您希望myex打印abc中创建的main的数据,则应为其提供abc参考参数。这是myex的C ++ 11版本:

#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);
}

答案 1 :(得分:2)

ab中的{p> exab中的main不同;初始化一个不会影响另一个。

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

  • ab作为参数从ex;
  • 传递给main
  • 在文件范围内声明abexmain之外);

答案 2 :(得分:1)

将结构定义更改为以下内容。这将照顾

struct abc{
  int a[4];

  abc()
  { memset(a, 0, 4*sizeof(int)); }
};