我有一个源代码,给出错误"表达式必须有指针类型"
这是遗留代码,我没有完整的代码。出现错误的代码是:
(void *)&arr[0]
我不知道arr
的类型。
- 在什么情况下会发生此错误?
- 什么类型的
arr
可能导致这个错误?
我知道数据较少,以确定问题,但我需要在较小的代码中模拟它。如有任何帮助,不胜感激。
当arr
没有指针或数组类型时发生此错误。除数组或指针类型外,任何类型的arr
都会导致此错误。
如果您"需要在更小的代码中模拟它",这里有一个示例
int main() {
int arr;
(void *)&arr[0];
}
用int
类型声明的变量arr
导致这个错误。实际上,任何非数组非指针类型的arr
都将导致此错误。
"I do not know the type of arr
."
好吧,你确实知道不是什么:指针。因此错误。
坏消息是:没有进一步的信息,是不可能修复的。
为了使表达式arr[0]
合法,arr
必须是数组或指针类型。请记住,后缀操作符(如[]
)比一元操作符(如&
)具有更高的优先级,因此整个表达式解析为(void *) (&(arr[0]))
;也就是说,我们取arr[0]
的结果的地址,并将其强制转换为void *
。