我遇到了一段这样做的代码:
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;