根据ISO C标准(6.3.16.1),如果"两个操作数都指向兼容类型的限定或非限定版本的指针,并且左侧指向的类型,则指针只能分配给另一个指针。拥有右边所指出的所有类型的限定符"。 我在静态分析工具中收到了警告,但我不确定是否存在真正的问题。因为您可以在下面的代码中看到,该指针将被传递给具有" const"的函数。其中的限定符原型
int main()
{
static volatile const signed int batu[5] = {1,2,3,4,5};
unsigned int x = 5;
func(x, (signed int *) batu);
}
signed int func(unsigned int p1, volatile const signed int *p2)
{
return 0;
}
答案 0 :(得分:1)
您只需要删除对函数调用中的(signed int *)
强制转换。函数所期望的变量batu
和参数p2
具有相同的类型(见下文),包括限定符,因此您根本不需要演员。
数组类型总是自动转换为其等效的指针类型,除非它是sizeof
或一元&
运算符的输入。来自C标准6.3.2.1/3。