c语言 - 何时发生错误"expression must have pointer type"?



我有一个源代码,给出错误"表达式必须有指针类型"

这是遗留代码,我没有完整的代码。出现错误的代码是:

(void *)&arr[0]

我不知道arr的类型。

  1. 在什么情况下会发生此错误?
  2. 什么类型的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 *

相关内容

最新更新