我正在尝试创建一个单词数组。像这样创建数组有什么区别:
char* myWords[10];
和
char* myWords = malloc(10*sizeof(char *))
我假设由于第一个是自动发生的,所以内存在函数执行结束时被回收。对吗?
最佳答案
这些是非常不同的类型。
第一个以通常的(自动)方式创建一个指针数组。这 10 个指针在函数结束之前一直有效。它们不会单独指向任何有效的内容,但每个都可以指向一个单独的字符串,该字符串可以从数组的每个元素访问。
第二个将一 block 内存分配给指向字符的单个指针。因此,您会期望它指向一个字符串(通常最多 40 或 80 个字节)。内存在您释放它之前一直有效,但指针是自动的,就像第一个一样。 (请注意,字符指针数组会衰减为 char **
而不是 char *
。)
关于c - Malloc 与自动创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29398621/