C语言 声明用户定义数组时的最佳实践是什么?



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

选项 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,我将尝试在 C 语言范围内回答。 我认为第二种情况比第一种情况更受欢迎。首先,对于第一种情况,您的数组将具有恒定的大小,如果用户给出的输入(例如超过 100(,则无法对其进行 realloc,因为您将收到 int[100] 不可分配的错误。对于第二种情况,假设给定的输入是足够的大小来创建恒定大小数组的大小,因为出于同样的原因,您无法 realloc 更改数组的大小,但至少您知道输入是由用户给出的。 我的建议是使用动态数组,该数组更难操作,因为您可能会有内存泄漏,例如,当动态数组中的元素不是基元类型而是结构体或其他需要内存分配的类型时。 但是,使用动态数组,您可以重新分配大小以使其更大或更小,以节省一些内存空间。 我是堆栈溢出的新手,所以也许你的问题是更深层次的东西,我的答案还不够。顺便说一句,我希望它能给你一些提示。

附言 静态数组总是使用起来更快,所以如果你确定元素的数量不会超过某个数字,那么最好使用恒定大小的数组。

如果使用C++:

{

最佳做法是使用标准模板库 (STL( 中的std::vector

使用reserve()resize()方法分配固定的所需空间或push_back()pop_back()根据每次插入和删除来调整大小。有关矢量的更多信息,请点击此处。

}

否则如果使用 C:

{

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

  • 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);
    

}

相关内容

最新更新