声明用户定义的数组时的最佳做法是什么?

问题描述 投票:1回答:2

拥有用户定义的数组的最佳实践是什么?通过用户定义,我指的是大小以及元素值。

选项A:预定义一个大小为100的数组(让我们说),然后询问用户他们希望数组中有多少个元素,知道它会小于我定义的元素。

int array [100];

printf("Input the number of elements to be stored in the array: ");
scanf("%d", &numElements);

选项B:在询问用户多少个元素后声明数组。

printf("Input the number of elements to be stored in the array: ");
scanf("%d", &numElements);

int array [numElements];

使用选项A,它可能会占用不必要的内存,但是我不确定选项B的缺点是什么,它将在运行时吗?

c arrays
2个回答
2
投票

因为它被标记为C,所以我将尝试在C语言的范围内回答。我认为第二种情况比第一种情况更受青睐。首先,对于第一种情况,您的数组将具有恒定的大小,并且如果用户给出的输入大于100,则无法对数组进行重新分配,因为您会收到错误,指出int [100]是不可分配的。对于第二种情况,假定给定的输入大小足以创建恒定大小的数组,因为出于相同的原因,您无法重新分配以更改数组的大小,但至少您知道输入是由用户给出的。我的建议是使用一个动态数组,因为它可能会发生内存泄漏,因此使用起来有点困难,例如,当动态数组中的元素不是基本类型而是结构或需要内存分配的其他类型时。但是,使用动态数组,您可以重新分配大小以使其更大或更小以节省一些内存空间。我是Stack Overflow的新手,所以也许您的问题更深,我的答案还不够。顺便说一句,希望它能给您一些提示。

P.S。静态数组总是可以更快地使用,因此,如果您确定元素数量不会超过一定数量,那么最好使用恒定大小的数组。


0
投票

如果使用C ++:

{

最佳实践是使用标准模板库(STL)中的std::vector

使用reserve()resize()方法来分配固定的所需空间,或者根据每个插入和删除来分配push_back()pop_back()来调整大小。有关向量here的更多信息。

}

否则,如果使用C:

{

使用动态内存分配在运行时期间使用malloc()]中定义的calloc()free()realloc()<stdlib.h>更改大小。

  • malloc()用于动态分配具有指定大小的单个大内存块。它返回void类型的指针,该指针可以转换为任何形式的指针。

    Syntax:
    ptr = (cast-type*) malloc(nbyte-size);  
    
  • calloc()用于动态分配指定类型的指定数量的内存块。它使用默认值“ 0”初始化每个块。

Syntax:
ptr = (cast-type*)calloc(n, element-size);  

其中n

是所需的元素数。
  • free()用于动态取消分配内存。使用功能malloc()calloc()分配的内存不会自行取消分配。因此,每当发生动态内存分配时,都会使用free()方法。

  • Syntax:
    free(ptr);
    
  • realloc()用于动态更改先前分配的内存的内存分配。如果先前借助malloc()calloc()分配的内存不足,则可以使用realloc()动态重新分配内存。

  • Syntax:
    ptr = realloc(ptr, newSize);
    

    }

    © www.soinside.com 2019 - 2024. All rights reserved.