这两个程序有区别吗?
int main(void) {
char str[80];
}
和
int main(void) {
char * str = (char*) malloc( sizeof(char) * 80 );
}
使用malloc
和类似数组的语法之间有区别吗?因此,如果我需要80个字符的内存,我应该使用malloc
而不是其他可能性,对吧?
我会尝试回答我自己的问题!
答案 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个字符,在第二种情况下,您在堆上分配内存。
两者都可以用作指针,并传递给函数,两者都可以用于数组索引语法。