【发布时间】:2020-05-06 08:23:00
【问题描述】:
我有一个数组 0 1 2 4 5 6 7 8 9。 我想在 2 和 4 之间插入 3。
调用函数后长度保持不变,即使我添加了一个值,为什么?
printf("%d,", feld[9]); 给了我正确的值,代码有效 - 但我收到警告。
即使我使用int feld[9] = {0,1,2,4,5,6,7,8,9}; 或int feld[] = {0,1,2,4,5,6,7,8,9}; 进行初始化,如何插入值?
nt insertArray(int* array, int length, int value, int pos)
{
int i;
if (pos < length)
{
for (i = length; i > pos; i--)
{
array[i] = array[i - 1];
}
array[i] = value;
length++;
}
else if (pos == length)
{
array[pos] = value;
length++;
}
return length;
}
int main()
{
int feld[9] = {0,1,2,4,5,6,7,8,9};
size_t length = sizeof(feld) / sizeof(int);
insertArray(feld, length, 3, 3);
length = sizeof(feld) / sizeof(int);
for (int i = 0; i < length; i++)
{
printf("%d,", feld[i]);
}
printf("\n");
printf("%d,", feld[9]);
return 0;
}
【问题讨论】:
-
您想在两者之间添加一个额外的元素,对吧?不只是交换已经存在的吗?如果是这种情况,你不能在 C 中这样做,因为数组是固定大小的,因此你不能随意添加元素。
-
@Tilo 该程序具有未定义的行为。您不能扩大数组。
-
不能扩展固定数组的长度,也许可以预留更多的内存或者去动态内存,这两种情况你都得自己记住实际的项数。
-
“但我收到警告”:嗯,哪个警告??
-
好问题@Jabberwocky :-):警告:数组索引 9 超出了数组的末尾(包含 9 个元素)[-Warray-bounds]