gpt4 book ai didi

c - 在 C 中,声明一个二维字符数组或一个参差不齐的字符串数组是否更节省空间? (具体问题如下)

转载 作者:行者123 更新时间:2023-12-04 12:10:17 25 4
gpt4 key购买 nike

我有一个关于以下空间效率的具体问题:

Suppose you want to declare an array of 7 string literals that represent the 7 colors of the rainbow (i.e. red, orange, yellow, green, blue, indigo, and violet). Assuming that the size of a pointer is 8 bytes, is it more efficient space-wise to declare a 2-dimensional array of chars or a ragged array of strings?



C 中的字符串让我感到困惑,我不确定我是否马上要解决这个问题。任何帮助将不胜感激,特别是即使使用少量代码进行演示。谢谢大家!

编辑:
我编写了以下代码:
#include <stdio.h>
#include <string.h>

int main(void) {
char *string_array[] = {"red", "orange", "yellow", "green", "blue", "indigo", "violet"};
char char_array[][7] = {"red", "orange", "yellow", "green", "blue", "indigo", "violet"};

printf("\nThe size of a string is: %lu", sizeof(char *));
printf("\nThe size of a string array with the given data is: %lu", sizeof(string_array));
printf("\nThe size of a char is: %lu", sizeof(char));
printf("\nThe size of a char array with the given data is: %lu", sizeof(char_array));

return 0;
}

输出以下内容:
The size of a string is: 4
The size of a string array with the given data is: 28
The size of a char is: 1
The size of a char array with the given data is: 49


我不确定我是否正确地做到了这一点,因为我预计第一个数组(不规则的字符串数组)会更大?

最佳答案

选项1:

const char *colors = {"red", "orange", "yellow", "green", "blue", "indigo", "violet"};
这里所有的字符串都占用了它们需要的只读内存( 43 字节),但是额外的 56字节(8字节的7个指针)用于将7个指针存储在内存中,结果 99字节总数。
选项 2:
const char colors[][7] = {"red", "orange", "yellow", "green", "blue", "indigo", "violet"};
这里声明了一个 2D 数组,但由于您需要在编译时声明第 2 维,因此它必须足够大以容纳数组中最长的字符串(每个字符串中的 +1 个字节用于空终止字节)。因此,您最终会在所有较短的字符串上浪费空间。
在这里, 49总共分配了字节(7 个字节的 7 个字符串),但为了存储所有字符串,您只需要 43字节 - 因此“浪费”了 6 个字节。

结论
总而言之,第二个选项需要更少的内存。

关于c - 在 C 中,声明一个二维字符数组或一个参差不齐的字符串数组是否更节省空间? (具体问题如下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61491088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com