这是我第一次问,所以请温柔点哈哈。 所以我试图更好地理解 C 中的数组。有没有一种方法可以在不使用 for 循环的情况下将元素添加到数组?问题是我想在数组末尾添加一个新元素,但不知道数组的大小。
所以我已经有了这个:
#include <stdlib.h> //not sure if needed but put it just in case
int main(void):
float real[20];
real[]={1,2,3,4,5};
我想将数字 6 添加到数组中,但我不想使用 real[5]=6。有没有另一种方法可以将元素添加到数组的末尾而无需循环检查数组中的每个元素是否为空?提前感谢您的帮助!
最佳答案
C 数组不知道它们的长度。如果您需要可以增长和收缩的阵列,则必须保留有关事件阵列长度的额外信息。像这样在堆栈上创建的数组:
real array[20] = {1, 2, 3};
将包含二十个元素,前三个用具体值初始化,其余初始化为零。如果您想将此数组视为一个最初包含三个值且最多可容纳 20 个值的数组,则必须将实际数组长度保留为一个额外变量:
real array[20] = {1, 2, 3};
int narray = 3;
然后您可以附加一个值。注意不要溢出 20 个元素的最大存储量:
if (narray < 20) array[narray++] = 9;
您可以读取最后一个值并将其从数组中删除:
if (narray) printf("%g\n", array[--narry]);
在这里,你必须注意不要让数组下溢。 (此外,不要在同一表达式中多次递减 narray
,这将导致未定义的行为。)
如果您编写一个对数组进行操作的函数,请同时传递数组和长度:
void array_print(float array[], int n)
{
int i;
for (i = 0; i < n; i++) {
if (i) printf(", ");
printf("%g", array[i]);
}
printf("\n");
}
然后这样调用它:
array_print(array, narray);
另一种方法是保留标记值,例如 0.0
。这在某些情况下很有用,但缺点是必须遍历整个数组才能找出长度。它还从您的数组可以容纳的有效值范围中删除哨兵。
当然,这里的优点是数组是“独立的”,即您不必将数组和长度传递给函数;只是数组就足够了。附加时,您仍然需要注意不要溢出最大存储空间,这使得这种方法很麻烦。
关于c - 在没有循环的情况下向 C 中的数组添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29509002/