我有一个结构,里面有几个数组。数组的类型为unsigned char [4]。
我可以通过调用
来初始化每个元素struct->array1[0] = (unsigned char) something;
...
struct->array1[3] = (unsigned char) something;
只是想知道是否有办法在一行中初始化所有4个值。
解决方案:我需要创建一个临时数组,并初始化所有值,然后调用memset()将值复制到struct数组。
答案 0 :(得分:26)
如果您真的是指“初始化”,因为您可以在声明变量时执行此操作,那么请确定:
struct x {
unsigned char array1[4];
unsigned char array2[4];
};
struct x mystruct = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 }
};
答案 1 :(得分:11)
创建结构时,可以使用聚合初始化对其进行初始化:
struct test {
int blah;
char arr[4];
};
struct test = { 5, { 'a', 'b', 'c', 'd' } };
答案 2 :(得分:5)
如果值相同,您可能会执行类似
的操作struct->array[0] = struct->array[1] = struct->array[2] = struct->array[3] = (unsigned char) something;
否则,如果值存储在数组中,您可以使用memcpy函数,如此
memcpy(struct->array, some_array, sizeof(struct->array));
答案 3 :(得分:2)
是:
struct Foo
{
unsigned char a[4];
unsigned char b[4];
};
struct Foo x = { { 1, 2, 3, 'a' }, { 'a', 'b', 'c', 0 } };
答案 4 :(得分:2)
我看到你有一个指针(是吗?)。
如果使用calloc()
为指针分配内存,则结构内的所有内容都将使用0
进行初始化。
否则,您需要memset()
为0或逐个元素分配值。
memset(struct_pointer, 0, sizeof *struct_pointer);
答案 5 :(得分:0)
你也可以循环:
for(i = 0; i < 4; i++) the_struct->array1[i] = (unsigned char) something;
即使你没有char,这也会有用,例如int(和值!= 0)。事实上,例如,设置一个由int构成的结构(当sizeof int大于1时)不是初始化它们的正确方法。