Tag: 初始化

如何通过编译器在C中初始化(到零)数组?

免责声明:我可能误解了如何创建,分配和初始化数组。 如果是这样,请尝试在两行之间阅读。 如果我通过做创建一个数组 int array[15] = {0}; 编译器的所有array元素都将元素初始化为0 。 这是如何通过编译器完成的? 编译器是否插入一个循环来迭代分配的内存并将每个元素设置为零? 尺寸会影响性能吗? 即初始化双倍大小(30)的数组需要更长的时间吗? 多久了? 双? 对数? 2的力量? 只是出于好奇而退出。

C – 在一行中更改结构数组的所有值

我可以声明一个结构: typedef struct { int var1; int var2; int var3; } test_t; 然后使用默认值创建这些结构结构的数组: test_t theTest[2] = { {1,2,3}, {4,5,6} }; 但是在我创建了数组后,有没有办法像上面一样改变值,只使用一行,明确指定每个值而没有循环?

为什么在C ++中不允许初始化整数成员变量(不是const static)?

当我尝试在类定义中初始化int成员变量时,我的C ++编译器会抱怨。 它告诉“只能在类中初始化静态const积分数据成员”。 能否请您解释这一限制背后的基本原理(如果可能,请举例说明)。

在C中初始化char数组

我不确定在初始化后以下列方式在char数组中会出现什么: char buf[5]={0,}; 这相当于 char buf[5]={0,0,0,0,0};

是否可以(重新)将数组的所有值设置在一行中(在初始化之后)?

在C中,我知道我可以制作这样的数组 int myarray[5] = {a,b,c,d,e}; 但是,想象一下这个数组已经初始化了 int myarray[5]; 然后在某个时刻,我想设置/改变所有的值而不去 myarray[0] = a; myarray[1] = b; myarray[2] = c; myarray[3] = d; myarray[4] = e; 而是更喜欢的东西 myarray = {a,b,c,d,e}; 我问这个的原因是因为如果我在堆上声明我的数组,我将初始化数组,如: int* myarray = malloc(5*sizeof(int)); 然后我希望能够在一行中输入所有值(主要是为了让我的代码看起来更干净)

C中的静态变量初始化

可能重复: C中静态变量的初始化 我知道全局变量或静态都是在C中自动初始化为零。但是,我不确定是否只有一个或者只有一个被初始化。 请注意,我不是在讨论函数中定义的变量,而是在.c文件中全局变量。 那么以下哪个变量会自动初始化为零? static struct mystruct var1; struct mystruct var2; static struct { int x; int y; } var3;

库初始化 – Win32实现中的pthread_once

你好。 我试图为我的库创建一个完全线程安全的初始化函数,我不能轻易找到pthread_once的替代品,这应该很容易解决问题。 我来这个代码: void libInit (void) { #ifdef WIN32 static volatile int initialized = 0; static HANDLE mtx; if (!initialized) { if (!mtx) { HANDLE mymtx; mymtx = CreateMutex(NULL, 0, NULL); if (InterlockedCompareExchangePointer(&mtx, mymtx, NULL) != NULL) CloseHandle(mymtx); } WaitForSingleObject(mtx); if (!initialized) { libInitInternal(); initialized = 1; } ReleaseMutex(mtx); } #else static pthread_once_t initialized = […]

C ++和C中的联合初始化

我已经在定义为的头文件中构建了一个使用常量的工作C库 typedef struct Y { union { struct bit_field bits; uint8_t raw[4]; } X; } CardInfo; static const CardInfo Y_CONSTANT = { .raw = {0, 0, 0, 0 } }; 我知道.raw初始化程序只是C语法。 如何在其中使用联合定义常量,以便我可以在C和C ++中使用它们。

C语言数组中未初始化元素的值

我有一个包含3个元素的数组。 但我只想初始化其中的2个。 我让第三个元素空白。 unsigned char array[3] = {1,2,}; int main(){ printf(“%d”,array[2]); return 0; } 打印结果是0.我在IAR和一些在线编译器上测试过它。 第三个元素的值是否有任何C规则? 是否有任何编译器通过0xFF填充第三个元素? (特别是交叉编译器)

使用其他Const Struct实例初始化Const Struct

我很好奇为什么下面的代码片段无法编译: typedef struct Foo { int a; int b; } Foo; static const Foo FooZero = { 0, 0 }; typedef struct Bar { Foo foo; int c; } Bar; static const Bar BarZero = { FooZero, 0 }; 它抱怨使用FooZero ,声称FooZero不是Compile-Time Constant FooZero量 但不是吗? 我在这里不理解什么? 显然,我可以简单地用{ 0, 0 }替换初始化程序中FooZero的使用 – 我的目的是问问题不是如何解决问题 – 我试图理解FooZero不是的根本原因,事实上,编译时常量。 谢谢