我正在尝试将数组分配给typedef结构的一个字段,但我找不到实际的方法。
我已经搜索了这个问题,但是我似乎找到的只是char *数组的答案,这不是我想要的,我只是想将一个数组分配给一个int数组,然后寻找一个无需初始化结构中的所有变量(下面将对其进行初始化,但我只想设置数组变量)的以下代码的实用方法:
SELECT rtrim('100.', '.') FROM dual
请假定稍后再调用config,并且struct和RA都可以访问它。
答案 0 :(得分:3)
RA.array = {1, 2, 3, 4, 5};
memcpy(RA.array, (int[]){1, 2, 3, 4, 5}, sizeof RA.array);
RA.array = arr;
memcpy(RA.array, arr, sizeof arr); // better: sizeof RA.array
答案 1 :(得分:1)
您可以使用bpm.InputSamples(sampleBuffer, numSamples);
,如另一个答案所示。或者,使用复合文字形式的临时变量复制整个结构而不是仅复制数组:
memcpy
这是可能的,因为尽管C不允许在运行时分配数组,但它确实允许结构。
答案 2 :(得分:1)
您可以使用memcpy
,如另一个答案中所示,或复制整个结构,如另一个答案中所示(尽管您的问题表明您只想设置数组,而不是其余结构)。 / p>
另一个选择是将数组仅嵌入到另一个结构中:
typedef struct {
int elem[5];
} RotArr;
typedef struct {
RotArr arr;
int number;
} Rot;
然后,您可以i
的身份访问Rot RA
中数组的元素RA.arr.elem[i]
。另外,您可以将值分配给整个RotArr
对象。您代码的其余部分可能看起来像这样:
Rot RA;
void config(void)
{
RA.arr = (RotArr){{1, 2, 3, 4, 5}};
RotArr arr;
int i;
for (i = 0; i < 5; i++)
{
arr.elem[i] = i + 1;
}
RA.arr = arr;
}
请注意,(RotArr){{1, 2, 3, 4, 5}}
是RotArr
类型的复合文字值。也可以将其写为(RotArr){ .elem = {1, 2, 3, 4, 5} }
或(RotArr){ .elem = { [0] = 1, [1] = 2, [2] = 3, [3] = 4, [4] = 5 } }
,以完全清楚化合物文字的哪些部分已显式设置(任何其余部分将设置为0),但是由于它只有一个成员,这些复合文字值的形式有些过分了。
答案 3 :(得分:1)
以下根据 C 语法工作。不确定这是您想要的。
#include <string.h>
#include <stdio.h>
typedef struct {
int array[5];
int number;
} Rot;
Rot RA = {{1,2,3,4,5}};
void main()
{
RA = (Rot) {{5, 6, 7, 8, 9}};
int arr[5];
int i;
for (i = 0; i < 5; i++)
{
arr[i] = i + 1;
}
memmove(RA.array, arr, sizeof(RA.array));
// OR
int l = sizeof(arr)/sizeof(arr[0]);
for(int i =0 ; i < l ; ++i) {
*(RA.array + i) = *(arr + i);
printf("%d\n",RA.array[i]);
}
}
此外,请使用 memmove,因为它允许内存重叠。