我需要一个全局数组的大小取决于用户。问题是我不知道如何声明一个数组globalLy,但是在得到用户输入以知道大小之后初始化它。我甚至不确定这是否可能,因为阵列的存储是在程序开始运行后分配的。所以我的问题是,我如何初始化一个全局数组后decleration的数组大小为t?
//what i want to achieve
...
struct some_name* sn;
...
main(){
...
sn = some_name[t]; //Where t is unkown before running the code
...
}
3条答案
按热度按时间lf5gs5x21#
你可以在运行时动态分配你的数组,如下所示:
这样做的缺点是,您要重复两次类型名称,如果
sn
的类型发生了变化,您必须记住也要更改malloc()
。避免该问题的等效替代方案是:
malloc()
分配的内存是未初始化的,可以包含任何内容。如果你想要零填充内存,你可以用途:当你完成它的时候,不要忘记释放你的记忆:
另外,不要忘记,如果
malloc()
和calloc()
无法分配您请求的内存,它们都可以返回NULL
。您应该始终检查这一点,并适当地处理错误。编辑:注意
struct some_name* sn;
定义的是指针,而不是数组。在为它分配了所需的内存并将sn
设置为该值之后,它可以被视为数组,例如。您可以使用相同的[]
符号访问其元素:ndh0cuux2#
如何在声明为大小为t数组后初始化全局数组?
在C中,initialization 有特定的含义,不能在声明后出现。* 分配 * 可以稍后进行。
一旦定义了一个 array,它的大小就不会改变,所以代码不能有一个大小的数组,然后再改变成另一个。
相反,代码可以稍后分配内存并将其分配给指针。分配大小可能会改变。
拉特尔
kxxlusnw3#