2016-05-04 33 views
-1

我想知道在执行期间是否可以在C中定义一个数组的大小。 例如,我可以这样做吗?在执行过程中定义一个数组的大小C

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

如果这是可能的,我应该何时使用malloc函数来动态分配内存?我的意思是,如果我可以在执行期间读取n值并分配n个阵列的数组,为什么要使用malloc?

+0

如果存储在函数返回后必须保留,则使用'malloc'。如果您希望以任意顺序释放存储空间,也是需要的。 –

+0

你能提供更多细节吗?我不明白。 – Zaratruta

+0

函数分配内存并返回指向它的指针。你必须为此使用'malloc'。例如,一个将元素添加到链接列表然后返回的函数。 –

回答

3

仅当编译器支持可变长度数组时,才可以使用变量来指定数组的长度。这些被添加到C99标准中,但现在在C11标准下是可选的。

2

其中一个区别是,当你在一个函数中声明一个数组时,它被分配到堆栈上。它是该函数的本地函数,当函数返回时,它会自动解除分配。 malloc,在堆上分配,并返回一个指向分配内存起始地址的指针。与堆栈中的存储不同,它不会自动释放,如果从函数返回指针,则可以在另一个函数中使用它,直到释放它为止。 这对于更多信息可能有用:http://www.programmerinterview.com/index.php/data-structures/difference-between-stack-and-heap/

相关问题