没有MAX_ELEMENTS初始化数组会更好吗?

时间:2015-09-23 21:51:03

标签: c arrays

int array[] = {2, 3, 4, 6};
int array[6] = {2, 3, 4, 6};
int array[MAX_SIZE] = {2, 3, 4, 6};

在第一个声明中,我没有提到阵列可以容纳的元素数量。第二个阵列可容纳6个元素,第三个阵列也可容纳6个元素。当我使用sizeof(array)来确定大小时。第一个数组的大小为16.第二个和第三个数组分别为24个。

为什么我不喜欢第一个?因为它使用了内存,因为它没有元素。在第二和第三的情况下,我首先告诉不。它可以容纳的元素和大小变成24.此外,我无法将这些记忆用于其他工作。

使用malloc(6 * sizeof(int))进行初始化并调用free(array)的另一种方法。这将允许我使用未使用的内存。但是我为什么要这样做,因为array[]使用内存作为它所拥有的元素。 malloc也做了同样的事情,但写起来很容易记住array[]

3 个答案:

答案 0 :(得分:2)

  

问:没有MAX_ELEMENTS初始化阵列会更好吗?

答:这取决于你想做什么!

使用此:

int array[] = {2, 3, 4, 6};

当您希望数组具有与初始化过程中的元素完全相同的单元格时。请注意,int array[4] = {2, 3, 4, 6};是等效的。

使用此:

int array[6] = {2, 3, 4, 6};

当你知道你需要更多的单元格时,它们会在初始化过程之后被填满。

此:

int array[MAX_SIZE] = {2, 3, 4, 6};
MAX_SIZE = 6时,

等同于上述情况。

你应该检查一下:

Difference between static memory allocation and dynamic memory allocation

sizeof()运算符的这个:

How do I determine the size of my array in C?

因此,如果您确切知道数组将包含多少元素,请使用静态内存分配,如果您不知道,请使用动态内存分配。

答案 1 :(得分:0)

我认为您对sizeof运算符感到困惑,并假设您获得的数字16是数组元素的数量。这不是真的。 sizeof运算符为您提供传递的对象大小(在低级意义上,而不是在面向对象的意义上),以字节为单位。所以,你得到16个字节,这意味着4个元素,因为int有4个字节。

答案 2 :(得分:0)

答案取决于您打算如何使用数组。

如果数组在编译时包含一组已知元素且仅包含那些元素,则不要指定大小。然后,如果需要遍历数组,可以使用以下语法:

for (i = 0; i < sizeof(array)/sizeof(array[0]); i++)

如果您想要在列表中添加或删除元素,则无需更改上述语句。

如果数组的大小与其初始元素的大小无关,或者数组未初始化或部分初始化,则指定大小。