反向循环的目的是什么以及注入数组的元素在哪里

What is the purpose of the reverse loop and where is the element being injected to the array

我遇到了一段执行此操作的代码:

arr = &some_array;
some_placeholder = array_push(arr);

// The loop:
for (i = arr->nelts - 1; i > 0; --i) {
    *((some_pointer *)arr->elts + i) = *((some_pointer *)arr->elts + i - 1);
}
*(some_pointer *)arr->elts = my_item;

循环的目的是什么?

我没有 c 知识,我想知道这个循环试图做什么, my_item 在数组中的什么位置?

很短:

循环将每个项目从索引 i - 1 复制到索引 i。如果循环不是倒序,它会将第一个项目复制到每个项目。

然后用 my_item.

覆盖索引 0 处的项目(现在也复制到索引 1)

编写循环的一种更具可读性的方法是使用数组索引而不是普通指针算法。这是完全相等的代码:

for (i = arr->nelts - 1; i > 0; --i) {
    (some_pointer *)arr->elts[i] = (some_pointer *)arr->elts[i-1];
}
(some_pointer *)arr->elts[0] = my_item;