c - 使用指针代替数组

标签 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 获取可变数量的参数,而我完全没有看到?

最佳答案

使用mallocheights 动态分配空间。

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

当您完成 heights 时,通过调用 free(heights) 来释放 指针。

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

 int heights[cases];

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

关于c - 使用指针代替数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24301798/

相关文章:

c++ - 将reinterpret_cast 转换为较小的数组是否安全?有更好的选择吗?

c++ - 打印数组元素内存地址 C 和 C++,为什么输出不同?

c - 在c中按字母顺序对字符串数组进行排序

c - 我无法理解这个简单代码的意义

c++ - 在C++中序列化二进制数据的正确方法

java - JVM内存错误统计

c++ - 物理内存上的堆和栈在哪里?

c - 如何使用 terminfo 在终端中设置颜色

c - 将取消引用的变量传递给函数可以节省内存吗? - C

c - 在链接链内动态分配和添加结构