使用 C 中的变量参数全局定义数组



这是代码:

int EdgeCount = 0;
int numOfEdges = 0;
void addEdge() {
// some code
numOfEdges++;
}
int EdgeWeightArray[numOfEdges]; // error

我希望带有变量参数的全局数组稍后使用它,但我不能这样做,因为没有#define我们就无法定义全局数组参数;#define不是变量。在我的代码中,numOfEdges是可变的,我无法使其恒定。

EdgeWeightArray具有全局 scobe,因此它必须是固定大小。但numOfEdges当然不是恒定的表达。

您期望EdgeWeightArray的尺寸是多少?您是否希望它在增加numOfEdges时会增长?如果是这样,您不想研究动态内存分配;即mallocrealloc

没有错误检查的简短示例:

int numOfEdges = 0;
int *EdgeWeightArray;
void addEdge(some parameters) {
//SOME CODE
numOfEdges++;
EdgeWeightArray = realloc(EdgeWeightArray, numOfEdges * sizeof(EdgeWeightArray[0]));
}

为什么不使用全局 int 指针并使用 malloc(( 分配具有所需元素数量的内存?

您尝试执行的操作是不可能的,因为全局变量的内存是在编译时计算的,并且 numOfEdge 的值是在运行时更新的。

在我看来,你想创建一个设计不好的代码,其中大小具有全局范围,向量必须具有本地范围才能存储在堆栈中(根据您的起点(。无论如何,你可以做这样的事情:

void defineSize() {
numOfEdges++;
}
void useIt()
{
int EdgeWeightArray[numOfEdges];
/* Use EdgeWeightArray, once the function has been executed, 
EdgeWeightArray will dissapear */
}

这是对乔纳森答案的扩展。

如果您已经知道数组最多有多少个元素,则可以对数组使用固定大小。目前这可能会更快,因为没有发生重新分配。 但是您必须确保使用此方法进行适当的错误处理。它可能很容易出错。

然后,您需要一个计数器来跟踪您的边缘,但您似乎已经拥有其中一个。

然后,您的代码将如下所示:

#define MAX_EDGE_COUNT 1000
int EdgeCount = 0;
void addEdge() {
// some code
EdgeWeightArray[EdgeCount] = newEdge;
EdgeCount++;
}
int EdgeWeightArray[MAX_EDGE_COUNT];

相关内容

  • 没有找到相关文章

最新更新