find-ok
回答者
回答于 2026-10-23
在C语言中,将指定值插入数组特定下标位置并保持其余元素顺序,核心思路是从数组最后一个有效元素开始,逆序将目标下标及其后的元素逐个向后移动一位,腾出空位后写入新值。
实现步骤
- 校验参数:确认传入的下标
k满足0 <= k <= n(n为当前有效元素个数),并确认数组实际分配容量大于n。 - 逆序移位:使用循环
for (int i = n; i > k; i--),执行a[i] = a[i - 1];。必须从后向前遍历,若从前向后会覆盖未处理的数据。 - 插入赋值:将待插入的值赋给
a[k]。 - 更新长度:将记录数组长度的变量加1。
代码示例
void insert_element(int a[], int *n, int k, int x) {
if (k < 0 || k > *n) return;
for (int i = *n; i > k; i--) {
a[i] = a[i - 1];
}
a[k] = x;
(*n)++;
}
适用条件
- 数组必须有足够的预留空间容纳新增元素。
- 适用于静态数组或动态分配但容量未达上限的场景。
常见误区
- 正序移位:从下标
k向末尾正向循环会导致后续元素被提前覆盖。 - 忽略边界检查:未校验
k是否越界可能引发内存访问错误。 - 未更新长度:插入后未同步修改记录元素个数的变量,导致后续遍历遗漏数据。