gpt4 book ai didi

c - 循环中守卫的数组索引?它实际上检查什么?

转载 作者:行者123 更新时间:2023-11-30 16:16:03 28 4
gpt4 key购买 nike

这些是用于使用开放寻址实现 HashMap 的 C 代码部分。我不明白 insert 函数中的 while 循环正在检查什么以及twoSum 函数中的 if 语句正在检查什么。

while 循环条件是否检查该值是否在数组中或者该值是否不为空。 if 语句是否检查值是否不为 0?我不明白。

我一直认为这样的东西会像 while(1) 循环一样工作,需要手动中断。

我想知道循环保护语句的条件是什么,我了解主体。

void insert(int *keys, int *values, int key, int value) {
int index = hash(key);
while (values[index]) { // What does this check for?
index = (index + 1) % SIZE;
}
keys[index] = key;
values[index] = value;
}
int* twoSum(int* nums, int numsSize, int target) {
int keys[SIZE];
int values[SIZE] = {0};
for (int i = 0; i < numsSize; i++) {
int complements = target - nums[i];
int value = search(keys, values, complements);
if (value) { // What does this line check for?
int *indices = (int *) malloc(sizeof(int) * 2);
indices[0] = value - 1;
indices[1] = i;
return indices;
}
insert(keys, values, nums[i], i + 1);
}
return NULL;
}

最佳答案

我们只能猜测。

看起来 insert 期望指向数组的指针始终具有值为零的最终元素,函数的设计者已选择该约定来表示“结束”数组”。

当搜索失败时,看起来 search 返回零。

但是,两者都可能是一个错误(我很怀疑,因为这种设计禁止将零视为“真实”/有效值),并且两者都可以说是糟糕的设计 - 在前一种情况下,为什么不通过数组大小作为参数?在后一种情况下,为什么不像其他 C API 那样返回 bool 并将结果(如果成功)作为“输出参数”给出?

最终,我们无法神奇地知道函数的先决条件,因此您必须询问编写该函数的人。

这就是为什么代码应该有解释性注释。

关于c - 循环中守卫的数组索引?它实际上检查什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56849528/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com