4

可能重复:
声明和 malloc 之间的区别

这两个程序有区别吗?

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

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

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

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

4

3 回答 3

7
char str[80];

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

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

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

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

char * str = malloc(80);

malloc即你不应该从C中转换 return并且sizeof(char)保证为 1

于 2012-12-14T11:58:59.793 回答
2

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

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

于 2012-12-14T11:58:06.203 回答
2

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

两者都可以用作指针,并传递给函数,并且都可以与数组索引语法一起使用。

于 2012-12-14T11:58:45.197 回答