可能重复:
声明和 malloc 之间的区别
这两个程序有区别吗?
int main(void) {
char str[80];
}
和
int main(void) {
char * str = (char*) malloc( sizeof(char) * 80 );
}
malloc
那么 using和类似数组的语法有区别吗?因此,如果我需要 80 个字符的内存,我应该使用malloc
而不是其他可能性,对吗?
我会尝试回答我自己的问题!
可能重复:
声明和 malloc 之间的区别
这两个程序有区别吗?
int main(void) {
char str[80];
}
和
int main(void) {
char * str = (char*) malloc( sizeof(char) * 80 );
}
malloc
那么 using和类似数组的语法有区别吗?因此,如果我需要 80 个字符的内存,我应该使用malloc
而不是其他可能性,对吗?
我会尝试回答我自己的问题!
char str[80];
在堆栈上分配 80 个字节。这将在str
超出范围时自动回收。
char * str = (char*) malloc( sizeof(char) * 80 );
在堆上分配 80 个字节。在您调用之前,此内存可用free
。
请注意,第二种情况可以简化为
char * str = malloc(80);
malloc
即你不应该从C中转换 return并且sizeof(char)
保证为 1
第一个分配在堆栈上,当变量超出范围时将被释放。堆上的第二个,必须明确地 free()'d。
两者都可以作为指针传递。
在第一种情况下,您在堆栈上分配 80 个字符,在第二种情况下,您在堆上分配内存。
两者都可以用作指针,并传递给函数,并且都可以与数组索引语法一起使用。