c-反向循环的目的是什么,注入数组的元素在哪里



我遇到了一段这样做的代码:

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的知识,我想知道这个循环试图做什么,CCD_ 1在阵列内部的位置?

非常短:

循环将每个项目从索引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;

最新更新