首页 > 试题广场 >

print函数声明为void print(int a,cha

[不定项选择题]
print函数声明为void print(int a,char b='b',int c=1); 下面函数调用正确的是()
  • print('a');
  • print(5,8);
  • print(5,'#');
  • print(5,'#',2);
C++在调用函数时,当实参和形参的数据类型不一致时,会发生数据类型转换!将低精度转换为高精度时,由编译器隐式完成;将高精度转换为低精度时,必须用强制类型转换运算符:static_cast<>()来转换才不会造成数据丢失。精度由低到高: char->int->double->long double。
因此 B 选项在将整数类型 8 复制给 char 时,会发生截断赋值。
发表于 2019-08-26 17:15:54 回复(1)
CD毫无疑问是对的,A的话字符转为整数即为97,B整数赋值为char,为截断赋值  把整数的前3*8位去掉  直接后8位赋值给char 

😂
发表于 2019-08-16 15:53:47 回复(1)

B发生了截断赋值, 把整数的前3*8位去掉  直接后8位赋值给char,最后c为默认值。
发表于 2020-06-29 10:56:48 回复(1)
可以吗?ab的写法是会报warning的吧?本身编译器就不建议这样写的,题目应该标一下可以编过就行
发表于 2019-12-08 20:27:21 回复(0)
哈哈,还真是全对,完美
发表于 2023-07-02 17:18:05 回复(0)
我认为ABCD都是可行的,关于这题涉及到的知识点是C++中的函数参数缺省,至于CD这里我看大家没什么争议我就不做解释了;对于AB选项来说,首先A选项实参传递的是一个字符,但字符的本质是什么?我们的字符是由ASCII码构成的,一个字符对应一个ASCII码,而ASCII码为整型,所以传递整型刚好对应了形参中int类型;而B选项无非就是数据发生了截断,但是它确实是可以编译通过的啊,只不过可能计算出的结果会有些偏差而已。数据截断并不是一种实质上的错误啊!!
发表于 2023-04-07 16:03:01 回复(0)
不严谨
发表于 2021-05-21 12:36:27 回复(0)
void print(int a,char b='b',int c=1){
    printf("%d ",a);
    printf("%c ",b);
    printf("%d ",c);
}
int main(){
    print(5,257); 	//5 1 1 (整数257赋值给char,发生截断赋值,直接后8位赋值给char,即0000 0001)
}
给参数b传入int型,超过255就会发生截断赋值
发表于 2023-10-10 14:55:20 回复(0)
我记得在C++primer里面记载的是,这种参数的确定的规则是:给第一个参数,那么面的参数是按照默认值确定,然后给第二个,在给第三个。但不可以给第一个确认和第三给确认而不给第二个,也就是要按顺序修改参数
发表于 2023-06-03 12:15:26 回复(0)
a,b 能编过吗? 小白很懵逼啊
发表于 2021-12-13 02:05:50 回复(0)