使用指针声明的字符串数组是否会像普通字符串数组一样浪费空间?
char* foo[] = { "bar", "foobar"}
对
char foo[2][7] = {"foo", "foobar"}
AFAIK,第二种情况“浪费”内存,因为第一个索引只需要 4,但分配了 7。和第一种情况一样吗?
不,对于指针数组,每个字符串仅分配其实际字符所需的字节数加上尾随的空值。
但是,权衡是指针本身占用内存;在现代 64 位计算机上通常为 8 个字节。
那么
char* foo[] = { "bar", "foobar"};
通常会使用
2*8 + (3+1) + (6+1) =
27 个字节,而
char foo[2][7] = {"foo", "foobar"};
使用 14。
因此,如果您知道所有字符串都会非常短,或者它们都非常接近相同的长度,那么像第二种方法这样的二维数组将使用更少的内存。如果它们的长度不同,并且有些相对较长,那么指针数组将使用更少。