我有一个给出错误的源代码"表达式必须有指针类型"
这是遗留代码,我没有完整的代码。错误发生的代码是:
(void *)&arr[0]
我不知道arr
的类型。
arr
可能导致此错误?我知道确定问题的数据较少,但我需要在较小的代码中模拟它。任何帮助将受到高度赞赏。
答案 0 :(得分:2)
当arr
没有指针或数组类型时,会发生此错误。除数组或指针类型之外的任何类型的arr
都会导致此错误。
答案 1 :(得分:0)
"我不知道arr
的类型。"
嗯,你确实知道它不是什么:一个指针。因此错误。
坏消息是:没有进一步的信息,就无法解决这个问题。
答案 2 :(得分:0)
为了使表达式arr[0]
合法,arr
必须是数组或指针类型。请记住,[]
等后缀运算符的优先级高于&
等一元运算符,因此整个表达式解析为(void *) (&(arr[0]))
;也就是说,我们获取arr[0]
的结果的地址并将其转换为void *
。
答案 3 :(得分:0)
如果你“需要用更小的代码模拟它”,这里有一个例子
int main() {
int arr;
(void *)&arr[0];
}
使用类型arr
声明的变量int
会导致此错误。实际上,任何非数组非指针类型的arr
都会导致此错误。