危险的指针投射导致const资格的丧失

时间:2016-04-27 14:19:23

标签: c pointers casting const

根据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;
}

1 个答案:

答案 0 :(得分:1)

您只需要删除对函数调用中的(signed int *)强制转换。函数所期望的变量batu和参数p2具有相同的类型(见下文),包括限定符,因此您根本不需要演员。

数组类型总是自动转换为其等效的指针类型,除非它是sizeof或一元&运算符的输入。来自C标准6.3.2.1/3。