Tag: 初始化

结构零初始化是否保证擦除填充区域?

假设我有以下结构: typedef struct { unsigned field1 :1; unsigned field2 :1; unsigned field3 :1; } mytype; 前3位可用,但sizeof(mytype)将返回4 ,这意味着29位填充。 我的问题是,标准保证的这些填充位是否由语句初始化为零: mytype testfields = {0}; 要么: mytype myfields = {1, 1, 1}; 这样可以安全地执行以下memcmp() ,假设位4..29为零,因此不会影响比较: if ( memcmp(&myfields, &testfields, sizeof(myfields)) == 0 ) printf(“Fields have no bits set\n”); else printf(“Fields have bits set\n”);

在声明以外的时间初始化C数组?

我在C中知道我可以做到以下几点。 int test[5] = {1, 2, 3, 4, 5}; 现在,这在声明数组时才合法。 但是我想知道为什么以后这样做不合法? 但是后来在该计划中,执行以下操作是不合法的。 test[5] = {10, 20, 30, 40, 50}; 或类似的东西。 为什么是这样? 我知道这不合法,我不是在抱怨,但有人可以给我一个更技术性的解释,为什么我不能这样做? (即不要只说C规范不允许它或类似的东西) 我假设它必须对内存在数组的堆栈上分配的时间做一些事情,所以在那一点C可以自动填充我的值,但那么为什么它不能在以后呢? 多谢你们

为什么在初始化多维数组时我不能完全省略维度?

在Visual Studio 2010中,此初始化按预期工作: char table[2][2] = { {‘a’, ‘b’}, {‘c’, ‘d’} }; 但是写下这样的东西似乎不合法: char table[][] = { {‘a’, ‘b’}, {‘c’, ‘d’} }; Visual Studio抱怨此数组可能不包含’that’类型的元素,并且在编译之后,VS报告两个错误:缺少索引和太多初始化。 问题 :为什么在初始化多维数组时我不能完全省略维度?

C中全局结构的成员是否初始化为零?

C中的全局或静态结构的成员是否保证自动初始化为零,与未初始化的全局变量或静态变量相同?

在C中为数组分配多个值

有没有办法以浓缩forms这样做? GLfloat coordinates[8]; … coordinates[0] = 1.0f; coordinates[1] = 0.0f; coordinates[2] = 1.0f; coordinates[3] = 1.0f; coordinates[4] = 0.0f; coordinates[5] = 1.0f; coordinates[6] = 0.0f; coordinates[7] = 0.0f; return coordinates; 像coordinates = {1.0f, …}; ?

如何在C中的结构中初始化const(使用malloc)

我试过了; void *malloc(unsigned int); struct deneme { const int a = 15; const int b = 16; }; int main(int argc, const char *argv[]) { struct deneme *mydeneme = malloc(sizeof(struct deneme)); return 0; } 这是编译器的错误: gereksiz.c:3:17: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token 而且,这也是; void *malloc(unsigned int); struct deneme { const […]

将结构数组初始化为全0的最快方法?

我正在尝试使用以下语法将结构数组初始化为全0: STRUCTA array[MAX] = {0}; 但是,我从gcc收到以下警告: 警告:初始化程序周围缺少大括号 我做错了什么 – 有另一种/更好的方法吗?

初始化“指向整数数组的指针”

int (*a)[5]; 我们如何初始化一个指向上面显示的5个整数数组的指针。 以下表达式是否正确? int (*a)[3]={11,2,3,5,6};

对于未由指定初始化程序命名的字段会发生什么?

在C99(而不是C ++)中,可以使用以下语法初始化结构: struct info { char name[8+1]; int sz; int typ; }; struct info arr[] = { [0] = { .sz = 20, .name = “abc” }, [9] = { .sz = -1, .name = “” } }; 未指定的字段会发生什么?

在初始化C / C ++多维数组时省略大小

我对C / C ++编译器的了解是,它们在初始化多维数组时忽略了内部括号。 所以,你不能这样做: int myArray[][] = { { 2, 3 }, { 4, 5 }, { 4, 1 } }; 因为编译器会完全看到它 int myArray[][] = { 2, 3, 4, 5, 4, 1 }; 现在它不知道它是6 * 1,3 * 2,2 * 3,1 * 6,还是其他东西(因为这可能是部分初始化列表,不一定完整)。 我的问题是,为什么这在许多编译器中都有效? int myArray[][2] = { { 2 }, { 4, 5 }, […]