gpt4 book ai didi

c - 来自 n 个初始化实例的数组

转载 作者:行者123 更新时间:2023-11-30 19:09:27 24 4
gpt4 key购买 nike

大家好,我在解决此练习时遇到问题。我从结构创建了一个实例,并使用随机值初始化了属性。

现在我需要编写一个函数来创建一个数组,其中包含 n 个完全初始化的结构实例。

struct FluxCapacitor* createFluxCapacitor(){ // Instance of my struct
struct FluxCapacitor *capi = malloc( sizeof(*capi) );
capi->value = rand();
capi->c_string = randomString();
}

我想当我这样解释时,说起来更容易:

例如,当 n 为 10 并且我想打印数组时,我应该有 10 个随机数和 10 个随机字符串。

这就是现在的样子

struct FluxCapacitor** createFluxCapacitorArray(unsigned int n) {

struct capi **array = malloc(n * sizeof *array);

for (int i = 0 ; i < n ; ++i)
{
array[i] = createFluxCapacitor();
}

};

而且我总是收到此错误 main.c|46|error: 'for' 循环初始声明仅允许在 C99 或 C11 模式下|

最佳答案

从你的问题来看,你没有理由构建一个指向结构的指针数组,但你可以直接构建一个结构数组:

struct FluxCapacitor* createFluxCapacitorArray(int n){ // Instance of my struct
int i;
struct FluxCapacitor *capi = malloc( sizeof(*capi) * n);
for (i=0; i<n; i++) {
capi[i].value = rand();
capi[i].c_string = randomString();
}
return capi;
}

然后您可以这样使用它:

struct FluxCapacitor *capi = createFluxCapacitorArray(n);
...
free(capi);

完成后,可以为阵列释放一个单独的空间。

如果您确实需要一个指向 FluxCapacitor 结构体的指针数组,则应该分别分配结构体数组和指针数组:

struct FluxCapacitor** createFluxCapacitorArray(int n){ // Instance of my struct
int i;
struct FluxCapacitor *capi = malloc( sizeof(*capi) * n);
struct FluxCapacitor **cp = malloc( sizeof(capi) * n);
for (i=0; i<n; i++) {
capi[i].value = rand();
capi[i].c_string = randomString();
cp[i] = capi + i;
}
return cp;
}

这样,您仍然拥有一个真正的数组,并且可以对其进行指针算术。此外,完成后您只需释放 2 个元素:

struct FluxCapacitor **cp = createFluxCapacitorArray(n);
...
free(cp[0]);
free(cp);

关于c - 来自 n 个初始化实例的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43249766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com