gpt4 book ai didi

c - C中的结构体数组初始化

转载 作者:行者123 更新时间:2023-11-30 20:05:22 25 4
gpt4 key购买 nike

typedef struct _set{
int root;
int rank;
}Set;

void Kruskal(Graph* g)

{
Set uni[g->nv];
Edge result[g->nv - 1];
int i;
int count = 0;
int num = 0;
int aRoot, bRoot;

for(i = 0; i < g->nv; i++){
uni[i].root = i;
uni[i].rank = 0;
}

QuickSort(g, 0, g->ne-1);

while(count != (g->nv-1) && num != g->ne){
WeightedUnion(uni, g->path[num].src, g->path[num].dest);
aRoot = Find(uni, g->path[num].src);
bRoot = Find(uni, g->path[num].dest);

if( aRoot != bRoot){
result[num] = g->path[num];
count++;
}
num++;
}
if(count != g->nv-1){
printf("No spanning tree\n");
}
else{
for(i = 0; i <= count; i++){
printf("[%d] %d - %d : %d\n",i+1,result[i].src,result[i].dest,result[i].weight);
}
}
}

这是我的代码部分。问题是我无法初始化“uni[g->nv]”。您可以在变量区域旁边看到“for”循环。我确信声誉必须初始化这个数组,但结果却没有。该数组不包含任何其他值。只是空的。我找不到我的问题。请告诉我我的问题或错误。

  • 我在 Xcode 中运行我的代码。也许这些信息有帮助

最佳答案

您正在使用可变长度数组 (VLA),该数组的长度在运行时动态取决于表达式。由于大小在编译时未知,因此您无法使用初始值设定项表达式来初始化它们,而必须像您所做的那样使用 for 循环来进行初始化。

当程序在定义它的函数的所谓堆栈上执行时,通常会实现 VLA。该堆栈有大小限制,您必须小心不要超出它。 (如果你这样做,没有工具可以直接知道。)

因此,不要像处理未知大小的大数据那样使用 VLA。相反,使用指针和 malloc 来分配您需要的内存。

关于c - C中的结构体数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31980322/

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