用 C 语言编程:"expected constant expression" Visual Studio 中的错误

programming in C: "expected constant expression" error in Visual Studio

我正在观看有关使用 C 代码对数组进行排序的 this 视频教程。与使用代码块的视频不同,我使用 Visual Studio 到 compile/run 我的代码。尝试 运行 以下

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>


int main()
{
    
    int i,temp,swapped;
    int howMany = 10;
    int goals[howMany];

    
    return 0;

    }

我收到以下错误:

Error 1 error C2057: expected constant expression d:\temp\c tutorials\c tutorials\main.c 17 1 C Tutorials

Error 2 error C2466: cannot allocate an array of constant size 0 d:\temp\c tutorials\c tutorials\main.c 17 1 C Tutorials

我使用的代码与视频中的代码完全相同。为什么 visual studio 不会使用先前声明的 howMany 变量分配 10 位内存?

你可以这样定义,

int goals[10];

或者你可以这样修改howManyconst,

const int howMany = 10;

或者你可以像这样在外面定义howMany宏,

#define howMany 10

您可以动态分配,使用malloccalloc。请注意,通过这种方式,您是从堆中分配的。

#include <stdlib.h>

const int howMany = 10;
int* goals = malloc(howMany * sizeof(int));

你应该检查指针以防 malloc 失败:

if (goals == NULL){
    /* Something went wrong, act accordingly */
} else{
    /* Move on in here, or just don't write the else part at all */
}

然后你可以通过索引访问这个数组:

goals[0] = 2017;

如果你需要调整这个数组的大小,你可以使用realloc。但是,在执行此操作时,首先使用一个新指针,然后再次检查它。假设您在 运行 时间内需要一个更大的数组。在这种情况下,我假设 howMany 没有被声明为 const int 所以它可以在没有一些指针 hack 的情况下重新分配。

howMany = 50;
int* temp_new_goals = realloc(goals, howMany * sizeof(int));
if (temp_new_goals == NULL){
    /* Something went wrong again */
} else{
    /* No problems, assign the new pointer. Don't worry, your old data remains still. */
    goals = temp_new_goals;
}

最后,不要忘记free您分配的内存。您不希望内存泄漏:

free(goals);