C 分配之间的差异
可能重复:C 分配之间的差异,c,arrays,pointers,malloc,C,Arrays,Pointers,Malloc,可能重复: 这两个项目之间有区别吗 int main(void) { char str[80]; } 及 那么使用malloc和类似数组的语法之间有什么区别呢?因此,如果我需要80个字符的内存,我应该使用malloc,而不是其他可能的方法,对吗 我试着回答我自己的问题 第一个在堆栈上分配,当变量超出范围时将被释放。第二个在堆上,并且必须显式为free()'d 两者都可以作为指针传递。在第一种情况下,在堆栈上分配80个字符,在第二种情况下,在堆上分配内存 两者都可以用作指针,并传递给函
这两个项目之间有区别吗
int main(void) {
char str[80];
}
及
那么使用malloc
和类似数组的语法之间有什么区别呢?因此,如果我需要80个字符的内存,我应该使用malloc
,而不是其他可能的方法,对吗
我试着回答我自己的问题 第一个在堆栈上分配,当变量超出范围时将被释放。第二个在堆上,并且必须显式为free()'d
两者都可以作为指针传递。在第一种情况下,在堆栈上分配80个字符,在第二种情况下,在堆上分配内存 两者都可以用作指针,并传递给函数,还可以与数组索引语法一起使用
char str[80];
在堆栈上分配80个字节。当str
超出范围时,这将自动回收
char * str = (char*) malloc( sizeof(char) * 80 );
在堆上分配80个字节。在调用free
之前,此内存一直可用
注意,第二种情况可以简化为
char * str = malloc(80);
i、 e.您不应该在C中从malloc
中转换返回值,并且sizeof(char)
保证为1+1,但我会更进一步,而不是“没有必要”。强制转换malloc的返回值可以隐藏某些细微的错误,否则这些错误将被标记,特别是在指针和int的宽度不相同的情况下。@paxdiablo Good point。我(希望)改进了我答案那部分的措辞。
char * str = malloc(80);