c - 危险的指针转换导致失去 const 资格

标签 c pointers casting constants

根据 ISO C 标准 (6.3.16.1),如果“两个操作数都是指向兼容类型的合格或非合格版本的指针,并且左边指向的类型具有所有右边指向的类型的限定符”。 我在我的静态分析工具中收到了警告,但我不确定是否存在真正的问题。因为正如您在下面的代码中看到的那样,该指针将传递给其原型(prototype)中具有“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;
}

最佳答案

您只需要删除函数调用中的 (signed int *) 强制转换。变量 batu 和函数预期的参数 p2 属于同一类型(见下文),包括限定符,因此您根本不需要强制转换。

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

关于c - 危险的指针转换导致失去 const 资格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36892583/

相关文章:

c - 为什么我没有 "undefined reference to"?

c - 指向指针的指针数组删除错误

c - 使用结构体指针的源代码

c++ - 工厂方法中的输出参数

java - ActionEvent.getSource : how to cast properly the source Object

casting - 什么特征可以用于标量转换?

c - 将 CPU 亲和性设置为进程 - C - Linux

c - C 中的内存泄漏 - 动态数组丢失数据

c - 在 C 程序中重新声明为不同类型的符号

postgresql - 将 varbit 转换为 int 的其他方法?还有大金币?