我知道以下函数将从数组中删除一个元素。
void removeElem (int V[N], int pos, int *length)
{
int i;
for (i = pos; i < *length-1; i++)
V[i] = V[i+1];
*length = *length - 1; // (*length)--
}
但是我不明白为什么,因为如果我的列表包含4个元素,并且我要删除的位置是位置编号3,则由于此“ 3<3
”,我将永远不会进入循环。 / p>
答案 0 :(得分:3)
考虑数组
A={10,20,30,40,50}
,让n = 5表示数组的大小。
如果我想删除最后一个元素(在这种情况下为50),那么我可以简单地减小数组的大小(即n = 4)。
*longi = *longi - 1;
*longi
表示要减小1的数组的大小。
我们不必为删除最后一个元素而对数组元素进行任何移动。因此,我们不进入循环。 但是,对于除最后一个元素以外的任何元素,要删除的元素右侧的所有元素都向左移动一个位置。这样我们进入循环。