我正在尝试使用以下语法将结构数组初始化为全0:
STRUCTA array[MAX] = {0};
Run Code Online (Sandbox Code Playgroud)
但是,我从gcc收到以下警告:
警告:初始化程序周围缺少大括号
我做错了什么 - 有另一种/更好的方法吗?
当我初始化下面的数组时,所有输出看起来都没问题,除了values[3].出于某种原因,values[3]初始化为values[0]+values[5]输出非常大的数字.我的猜测是,我在尝试分配values[0]+values[5]之前将它们妥善存储在内存中,但是如果有人能够解释那将是很好的.
int main (void)
{
int values[10] = {
[0]=197,[2]=-100,[5]=350,
[3]=values[0] + values[5],
[9]= values[5]/10
};
int index;
for (index=0; index<10; index++)
printf("values[%i] = %i\n", index, values[index]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
values[0] = 197
values[1] = 0
values[2] = -100
values[3] = -1217411959
values[4] = 0
values[5] = 350
values[6] = 0
values[7] = 0
values[8] = 0
values[9] = 35
Run Code Online (Sandbox Code Playgroud) c arrays runtime-error designated-initializer unspecified-behavior
可能重复:
如何在C
数组初始化中初始化数组,引用前一个元素ok?
我想知道在c/c ++标准中进行这样的初始化是否安全:
int a = 5;
int tab[] = { a , tab[0] + 1 , tab[1] };
Run Code Online (Sandbox Code Playgroud)
它成功编译并执行gcc 4.5和clang 2.9,但它总是真的吗?
打印此表给出5 6 6.它在全球范围内初始化.
通常它在c和c ++中都很有趣,但我想在c ++中使用它:)
我有一个结构,里面有几个数组.数组的类型为unsigned char [4].
我可以通过调用初始化每个元素
struct->array1[0] = (unsigned char) something;
...
struct->array1[3] = (unsigned char) something;
Run Code Online (Sandbox Code Playgroud)
只是想知道是否有办法在一行中初始化所有4个值.
解决方案:我需要创建一个临时数组,其中所有值都已初始化,然后调用memset()将值复制到struct数组中.
我是C的初学者,我真的需要一种有效的方法来设置数组的所有元素等于零或任何相同的值.我的数组太长了,所以我不想用for循环来做.
可以说我有一个类似的阵列
int arr[10][10];
Run Code Online (Sandbox Code Playgroud)
现在我想将此数组的所有元素初始化为0.如何在没有循环或指定每个元素的情况下执行此操作?
请注意这个问题是否适用于C.
float myArray[myArraySize] = {1};
Run Code Online (Sandbox Code Playgroud)
在上面的表达式中,只有第一个元素是init和1.如何使用复合文字(不是memset)初始化所有带元素的元素?
我在unix上使用GCC 4.2进行编译.
在用C语言编写的程序的加载数据部分中,我看到缓冲区的初始化是这样完成的:
char buffer[100] = {0, };
Run Code Online (Sandbox Code Playgroud)
但是我不确定这个陈述赋予了什么值.请分享一些想法.
这取决于编译器还是语言功能?
如果此语句等效于以下,那么在该零之后使用逗号的重点是什么:
char buffer[100] = {0};
Run Code Online (Sandbox Code Playgroud)
是不是因为编码器只想确保第一个元素为零,而不关心其余元素?
在阅读如何在C中初始化数组之后,特别是:
但是,不要忽视明显的解决方案:
int myArray [10] = {5,5,5,5,5,5,5,5,5,5};
我试过这样的事情:
#include <iostream>
class Something {
private:
int myArray[10];
public:
Something() {
myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
}
int ShowThingy(int what) {
return myArray[what];
}
~Something() {}
};
int main () {
Something Thing;
std::cerr << Thing.ShowThingy(3);
}
Run Code Online (Sandbox Code Playgroud)
我得到:
..\src\Something.cpp: In constructor 'Something::Something()':
..\src\Something.cpp:10:48: error: cannot convert '<brace-enclosed initializer list>' to 'int' in assignment
Run Code Online (Sandbox Code Playgroud)
在这种情况下显而易见的并不那么明显.我真的希望我的阵列的启动也更加动态.
我累了:
private:
int * myArray;
public:
Something() …Run Code Online (Sandbox Code Playgroud)