在 C 中,例如,任何时候我想处理字符串(C 不支持),我都可以做
char* String = (char*) malloc(25);
或者
char String[25];
我想知道这两种定义数组长度的方法在 C 中的主要区别是什么(除此之外,第一种是指针,第二种不是)。
我也想知道哪个更安全。
最佳答案
char* String = (char*) malloc(25);
char String[25];
这两个数组对象的主要区别在于生命周期。第一个对象的生命周期从 malloc
返回开始,到调用 free
结束。第二个有一个生命周期,这取决于它被声明的范围。在 block 范围内,对象是在 block 进入时创建的,直到 。在文件范围内,生命周期从程序开始,到程序结束时结束。
另一个区别是 String
在第一种情况下是一个指针,在第二种情况下是一个数组名。例如,sizeof String
在第一种情况下产生指针对象的大小,但在第二种情况下产生数组对象的大小。
最后一点,do not cast malloc
的返回值。
关于c - 内存分配与数组大小定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25047464/