例如,我有这个结构和代码:
typedef struct
{
long long *number;
} test;
test * test_structure;
test_structure = malloc(sizeof(test));
test_structure->number = malloc(sizeof(long long) * 100);
free(test_structure->number);
free(test_structure);
与此结构和代码:
typedef struct
{
long long number[100];
} test;
test * test_structure;
test_structure = malloc(sizeof(test));
free(test_structure);
因为我知道数字数组总是100,所以这些方法中的任何一种都是完全可以接受的,或者比其他方法更好,为什么?
答案 0 :(得分:6)
第二种方式更好,原因如下:
尽管如此,这两种方法基本相同。你使用(我很想说'浪费',但这不太公平)与第一个相比更多的空间,但它不太可能是一个主要问题(如果是,你可能想要改变大小100,因为这会比修补指针与数组相比节省更多空间。
答案 1 :(得分:3)
我肯定会选择后者。内存配置文件几乎相同。由于只有一个内存分配,因此需要跟踪的移动部件较少,因此几乎没有理由考虑前一种替代方案。
事实上,即使是一个长度未知的数组,我也许会选择一个裸long long *
而不是一个似乎没有增加任何价值的结构包装器。
答案 2 :(得分:0)
我只使用后者,因为你说你知道数组的大小。如果没有,那么前者。