gpt4 book ai didi

c - 在需要无符号字符指针的方法中传递整数地址

转载 作者:太空宇宙 更新时间:2023-11-04 08:38:39 25 4
gpt4 key购买 nike

最近我有代码(在 C 中),我将一个 int 的地址传递给一个函数,该函数需要一个 pointer to unsigned char。这是无效的吗?这是 UB 还是什么?

例如,

void f(unsigned char*p)
{
// do something
}

// Call it somewhere
int x = 0; // actually it was uint32_t if it makes difference
f(&x);

虽然我确实收到了警告......在 Xcode 中编译

最佳答案

int *unsigned char * 不被视为兼容类型,因此隐式转换将发出诊断信息。但是,标准确实允许在不同指针之间进行显式转换,但要遵守两条规则(C11 第 6.3.2.3 节):

  1. 将类型“指向 A 的指针”转换为类型“指向 B 的指针”并返回“指向 A 的指针”应导致相同的原始指针。 (即,如果 pint * 类型,则 (int *)(double *)p 将产生 p)
  2. 将任何指针转换为 char * 将指向对象的最低可寻址字节。

因此,在您的情况下,显式 (unsigned char *) 转换将产生一个没有任何未定义行为的合格程序。

关于c - 在需要无符号字符指针的方法中传递整数地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24886649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com