请问一个c语言问题 数组相关
为啥调用下面的函数后 直接在数组尾部加数据啊上面第一个第一个判断不是没过啊?或者是那位可以解释下怎么把数据加到最后一个的void insert_at(DynamicArray *array, size_t index, int element)
{
// 判断索引是否超出范围
if (index > array->length)
return;
// 判断长度和容量是否相同
if (array->length == array->capacity)
resize_dynamic_array(array, array->capacity * 2); // 扩容
// 从当前索引位置index向后一个一个的移动数据
for (int i = array->length; i > index; i--)
array->data = array->data;
// 把新的输入存储到当前的这个索引位置
array->data = element;
array->length++; // 长度加1
}
// 向数组尾部追加一个数据的函数
void insert_end(DynamicArray *array, int element)
{
insert_at(array, array->length, element);
} 脑子转不明白了{:1_908:} 代码里面判断的是 index > array->length,但是在尾部追加的时候 index == array->length,所以没有问题。 比如,数组长度是10,index的范围是0-9
1、你传进去的是数组长度,10
第一条判断没生效,因为这里的index是10
2、然后触发了扩容,数组长度为20了(这里是因为数组长度==数组容量)
3、这里是数据迁移,触发了,因为i=20,他这里为啥这么写我没懂,因为移动了个寂寞,可能是为了防止字符串啥的做\0移动吧
4、在index下标写入数据
打完收工 长度和索引大小不是同一个值,是不是跟别的语言学混了 熊猫拍板砖 发表于 2024-9-8 00:39
比如,数组长度是10,index的范围是0-9
1、你传进去的是数组长度,10
第一条判断没生效,因为这里的index ...
好的看明白了 {:1_893:} liuenzhuo 发表于 2024-9-8 13:19
长度和索引大小不是同一个值,是不是跟别的语言学混了
学的有点不扎实 已经看明白了{:1_893:}
页:
[1]