如果给出一个指向元素数组的void指针,那么在'C'中是否有一种方法可以找出在数组中存储了哪种类型的元素(即元素的数据类型)?
如果我将此void指针强制转换为随机数据类型并尝试遍历数组,可能会发生什么?
答案 0 :(得分:1)
简短回答:不,未定义的行为。
答案很长:你必须将指针投射到合适的东西上。有一些方法可以解决这个问题,但前提是你和void指针本身一起传递了有关数组中每个元素宽度的信息。
答案 1 :(得分:0)
在GPF之前,你会获得最佳选择GPF,在最坏的情况下,你会执行一些随机代码。在C中,演员除了“考虑”指针属于某种类型之外什么都不做,唯一负责演员有效的是你。
答案 2 :(得分:0)
你不可能知道数组中的类型,因为它只是一个包含地址的数字。将指针转换为不同的类型是未定义的行为,可能会产生对齐问题,这可能会产生CPU异常,具体取决于您的体系结构。
答案 3 :(得分:0)
没有通用的方法,但是如果您知道某些类型的数据可能在变量中,并且这些不同的数据类型在某种程度上是不同的,那么您可以检查指针的起始字节尝试并做出有根据的猜测(您可能首先要检查指针以确定它是否具有禁止某些数据类型的任何对齐限制)。在调试之外(即你知道某些东西破坏了你的指针,但你不确定是什么)没有充分的理由这样做。