何时error"表达式必须具有指针类型"发生?

时间:2015-07-21 13:02:04

标签: c pointers types casting compiler-errors

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

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

(void *)&arr[0]

我不知道arr的类型。

  1. 这种错误会在什么条件下发生?
  2. 哪种类型的arr可能导致此错误?
  3. 我知道确定问题的数据较少,但我需要在较小的代码中模拟它。任何帮助将受到高度赞赏。

4 个答案:

答案 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都会导致此错误。