使用指针代替数组

Cha*_*son 2 c memory pointers

我绝对是C游戏的新手,并且会喜欢以下代码片段的一些帮助:

#include <stdio.h>

int main() {
    int cases;
    scanf("%d", &cases);
    printf("%d", cases);

    int i;
    int *heights;
    for(i=0; i<cases; i++){
        scanf("%d", &heights[i]);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我理解它是段错误,因为我给scanf了一个NULL指针,所以有没有办法允许scanf将值提供给这个指针?或者是否有更好的方法来获取stdin我完全遗漏的可变数量的参数?

hac*_*cks 7

使用malloc用于动态分配空间heights.

int *heights = malloc(cases*sizeof(int));  
Run Code Online (Sandbox Code Playgroud)

free通过调用指针free(heights),当你与完成heights.

对于小值,cases您可以使用可变长度数组:

 int heights[cases];
Run Code Online (Sandbox Code Playgroud)

并且不要忘记在C99模式下编译代码(-std=c99).

  • +1并养成为`malloc()`调用`free()`的习惯. (2认同)