使用指针代替数组

时间:2014-06-19 08:15:55

标签: c pointers memory

我绝对是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;
}

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

2 个答案:

答案 0 :(得分:7)

使用mallocheights动态分配空间。

int *heights = malloc(cases*sizeof(int));  
完成free后,通过调用free(heights)来指示heights

对于cases的小值,您可以使用variable length arrays

 int heights[cases];

并且不要忘记以C99模式(-std=c99)编译代码。

答案 1 :(得分:3)

高度指针不包含任何内存。首先,您必须根据需要使用malloc系统调用来分配内存。 在你的情况下malloc的语法 -

heights = (int *)malloc(cases*sizeof(int));

要记住一件事,在动态记忆位置之后你必须释放它。记忆免费 -

free(heights)