我在C中有一个大数组(如果有所不同,则不是C++).我想将所有成员初始化为相同的值.我发誓我曾经知道一个简单的方法来做到这一点.我可以memset()在我的情况下使用,但是没有办法在C语法中构建这样做吗?
我刚刚开始进入C++,我想养成一些好习惯.如果我刚刚int使用new运算符分配了一个类型的数组,我怎么能将它们全部初始化为0而不用自己循环遍历它们?我应该用memset吗?有没有"C++"方法呢?
我正在准备 C++ 入门课程的期末考试。我们的教授给了我们这个问题来练习:
解释为什么代码会产生以下输出:
120 200 16 0
using namespace std;
int main()
{
int x[] = {120, 200, 16};
for (int i = 0; i < 4; i++)
cout << x[i] << " ";
}
Run Code Online (Sandbox Code Playgroud)
该问题的示例答案是:
cout 语句只是循环遍历其下标由 for 循环的增量定义的数组元素。元素大小不是由数组初始化定义的。for 循环定义了数组的大小,该大小恰好超出了初始化元素的数量,因此最后一个元素默认为零。第一个 for 循环打印元素 0 (120),第二个循环打印元素 1 (200),第三个循环打印元素 2 (16),第四个循环打印默认数组值零,因为元素 3 没有任何初始化。现在 i 点超出了条件并且 for 循环终止。
我有点困惑为什么数组之外的最后一个元素总是“默认”为零。为了进行实验,我将问题中的代码粘贴到我的 IDE 中,但将 for 循环更改为for (int i = 0; i < 8; i++). 然后输出更改为120 200 16 0 4196320 0 …
c++ arrays initialization undefined-behavior zero-initialization
可以在编译时定义静态数组,如下所示:
const std::size_t size = 5;
unsigned int list[size] = { 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)
问题1 - 是否可以通过使用各种元编程技术在编译时"以编程方式"分配这些值?
问题2 - 假设数组中的所有值都是相同的barr,是否可以在编译时以编程方式选择性地分配值?
例如:
const std::size_t size = 7;
unsigned int list[size] = { 0, 0, 2, 3, 0, 0, 0 };
Run Code Online (Sandbox Code Playgroud)
更新: Georg Fritzsche的解决方案非常棒,需要一些工作才能在msvc和intel编译器上进行编译,但这仍然是解决问题的一种非常有趣的方法.
我有一个数组成员的类,我想初始化为全零.
class X
{
private:
int m_array[10];
};
Run Code Online (Sandbox Code Playgroud)
对于局部变量,有一种简单的零初始化方法(参见此处):
int myArray[10] = {};
Run Code Online (Sandbox Code Playgroud)
此外,类成员m_array显然需要初始化,因为默认初始化整数会见好就收随机的垃圾,如解释在这里.
但是,我可以看到两种方法为成员数组执行此操作:
括号:
public:
X()
: m_array()
{}
Run Code Online (Sandbox Code Playgroud)
带括号:
public:
X()
: m_array{}
{}
Run Code Online (Sandbox Code Playgroud)
两个都正确吗?这两者在C++ 11中有什么区别吗?
我正在尝试初始化一个设置为-1的int数组.
我尝试了以下,但它不起作用.它只将第一个值设置为-1.
int directory[100] = {-1};
Run Code Online (Sandbox Code Playgroud)
为什么它不能正常工作?
I'm debugging some code that essentially is identical to this:
struct Foo { int a; int b; };
struct Bar { Bar() {} Foo foo{0}; };
Run Code Online (Sandbox Code Playgroud)
When I make an instance of Bar, it seems like both a and b are initialized to zero. Is this guaranteed? Where can I find that in the spec?
我有一个与C++数组和结构相关的问题.我有一个结构:
struct npc_next_best_spot{
npc_next_best_spot(): x({0}),
y({0}),
value(-1),
k(0),
i({0}),
triple_ress({0}),
triple_number({0}),
bigI(0)
{}
int x[3];
int y[3];
double value;
int k;
int i[3];
int triple_ress[3];
int triple_number[3];
int bigI;
};
Run Code Online (Sandbox Code Playgroud)
但是这给出了警告
"非类型的list-initializer不能用括号括起来".
那么如何确保使用0所有值的值初始化这些数组呢?
我想知道它是如何int array[10]={0}工作的?
这样整个阵列都会一路走来吗?
for(int i=0;i<10;i++) array[i]=0;
Run Code Online (Sandbox Code Playgroud)
还是更有效率?
有人能让我想起将C中的数组(特别是多维)分配给单个值的语法吗?
我相信这些波浪形的括号做了这个,虽然我在测试时遇到了编译器错误:
int ArrayName [5][5] = {1};
Run Code Online (Sandbox Code Playgroud)
将数组初始化为1.