分配差异

时间:2012-12-14 11:55:52

标签: c arrays pointers malloc

  

可能重复:
  Difference between declaration and malloc

这两个程序有区别吗?

int main(void) {
    char str[80];
}

int main(void) {
    char * str = (char*) malloc( sizeof(char) * 80 );
}

使用malloc和类似数组的语法之间有区别吗?因此,如果我需要80个字符的内存,我应该使用malloc而不是其他可能性,对吧?

我会尝试回答我自己的问题!

3 个答案:

答案 0 :(得分:6)

char str[80];

在堆栈上分配80个字节。当str超出范围时,这将自动回收。

char * str = (char*) malloc( sizeof(char) * 80 );

在堆上分配80个字节。在您致电free之前,此内存可用。

请注意,第二种情况可以简化为

char * str = malloc(80);

即。您不应该从C中malloc转换回报,sizeof(char)保证为1

答案 1 :(得分:2)

第一个在堆栈上分配,当变量超出范围时将被释放。堆上的第二个,必须明确地为free()。​​

两者都可以作为指针传递。

答案 2 :(得分:2)

在第一种情况下,您在堆栈上分配80个字符,在第二种情况下,您在堆上分配内存。

两者都可以用作指针,并传递给函数,两者都可以用于数组索引语法。