【发布时间】:2021-01-16 12:23:53
【问题描述】:
互联网的好人!
在我穿越 C 风雨如磐的土地的新手旅程中,我发现了这段代码:
void * add (void * _set, const void *_element)
{ int * set = _set;
const int * element =_element;
assert(set > heap && set < heap +MANY);
assert(* set ==MANY);
assert(element >heap && element < heap +MANY);
if (* element == MANY)
* (int *) element = set — heap;
else
assert(* element == set —heap);
return (void *)element;
}
在这段代码中,heap 是ints 的数组,MANY 是整数文字的宏,整个想法是将heap 的某个元素的索引存储在element(或检查它是否已经存在)。 _set 和 _element 被假定为指向 heap 元素的指针。
问题是 - 他们为什么可以先说 _element 指向 const 某物,然后创建一个新指针 element 指向 const int,然后将其转换为指向常规的指针int 然后只修改这个int?是不是有什么不好的禁术?
提前谢谢你,好心的先生们!
干杯!
【问题讨论】:
-
如果您询问您在垃圾箱中发现的严重损坏的 C 代码中的每一个荒谬的东西,您将花费大量时间在人们的智力破产中。
-
@EOF - 我不知道为什么“新蜜蜂之旅”这个词组合没有告诉你我还没有很好地区分“可怕的破 C”和我可能只是不知道的东西知道或理解,但感谢您指出使用上面示例中的代码是一种不好的做法。