gpt4 book ai didi

c - C 和数组声明中的 "final"修饰符

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:18 26 4
gpt4 key购买 nike

我正在为我的 C 入门类(class)布置家庭作业(别担心,我不需要你们帮我解决任何问题!)我有一个关于设计的问题。我正在尝试弄清楚如何通过从文件读取输入来安全地设置数组的大小。

最初我是这样写的:

fscanf(ifp, "%d", &number_of_pizzas);
float pizza_cost[number_of_pizzas];

我很确定这会很好地构建,但我知道声明一个大小可变的数组是不明智的。我的作业指定数组不能大于 100,所以我知道我可以只写“pizza_cost[100]”,但我宁愿精确地做而不是浪费内存。

Java是我最熟悉的语言,我相信问题的解决方案应该是这样写的:

Scanner s = new Scanner(System.in);
final int i = s.nextInt();
​int[] array = new int[i];

我知道 C 没有 final 关键字,所以我假设“const”是可行的方法...有什么方法可以将该代码复制到 C 中吗?

最佳答案

I'm pretty sure this will build fine, but I know that it's unwise to declare an array with a variable size.

只有在大小没有上限的情况下才是正确的。如果您知道 number_of_pizzas 为 100 或更少,则您的声明在除内存最受限系统之外的所有系统上都是安全的。

如果您更改代码以在声明可变大小数组之前验证number_of_pizzas,您将是安全的。但是,此数组的范围仅限于函数,因此您无法将其返回给函数的调用者。

Java 代码的类比如下所示:

float *pizza_cost = malloc(sizeof(float)*number_of_pizzas);

现在您的数组可以从函数返回,但您需要负责在程序的某个时刻通过调用 free(pizza_cost) 释放它

就使 number_of_pizzas 成为 const 而言,它不适用于 scanf:修改 是非法的code>const 通过一个指针。即使在 Java 中它也没有什么用处,因为您可以通过访问数组的 length 来获得相同的值。

关于c - C 和数组声明中的 "final"修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26473838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com