我最近想到了一个问题。假设我们有:
void test(int32_t b){
printf("value is %d", b);
}
int main(){
uint32_t a = 43;
test(a);
return 0;
}
当你将一个无符号变量传递给有符号参数时会发生什么?值的复制过程是如何进行的,类型转换又是如何进行的呢?
可以有人详细地解释一下吗?
谢谢
a
将被转换为b
的类型,就像通过赋值一样。(C99,6.5.2.2p7)“如果表示被调用函数的表达式具有包括原型的类型,则参数会隐式转换为相应参数的类型,每个参数的类型均取其已声明类型的无限定版本。”我相信对于这种数据类型的转换是透明的,但需要谨慎处理。如果uint32_t的值大于int32_t可以容纳的值,则int32_t会滚动到不希望的值。