我在网上搜索了我的问题,我知道从函数返回数组值到我们的主函数(或任何其他函数,无论如何)我需要使用指针(它可以用各种方法完成) ,我也可以用它们来解决我的问题,但是,我仍然很好奇为什么我的程序在一个意想不到的行为(当然对我来说!)的方式,我是一个初学者所以请详细解释你可以,这是我的小程序:
char Calc(char);
int main(){
Calc('1');
return 0;
}
char Calc(char a) {
a = int(a);
std::cout << a <<std::endl;
std::cout << int('1');
_getch();
return 'c';
}
根据ASCII表,'1'的整数是49,所以我的 Func 函数中的两个命令都必须显示相同的东西,即49,但是它显示为输出:< / p>
1
49
我在这里缺少什么?感谢。
答案 0 :(得分:10)
std::cout << a <<std::endl;
显示1
,因为std::basic_ostream& operator<<
作为非成员运算符重载char
并显示其相应的ASCII值。另一方面,
std::cout << int('1') <<std::endl;
将char
'1'
显示为int
(由于显式转换),因此您会看到49
的相应ASCII索引。这是因为对于算术类型,会改为成员std::basic_ostream& operator<<
。
请注意您的行
a = int(a);
不执行任何操作,但不会将a
的类型更改为int
;它只是将RHS转换为int
然后将int
分配给原始char
(显然没有丢失数据)。在C或C ++中,类型在编译时就是一成不变的。
答案 1 :(得分:0)
执行a = int(a);
后,您将char
提升为int
。但是在将此结果分配给a之后。因此,您将int
投射到char
,这可能会丢失数据。
但实际上你只是说'1' = int('1')
,所以你什么也没做。试试a = int(42000)
。
答案 2 :(得分:0)
a是char,所以将int分配给a将分配字符1
的ASCII码的字符值:
char a = (int)a;// a = '1' (int)a = (int)'1' = 49 so the result is:
a = (char)49 = 1; // because assigning an integer to char will implicitly convert it.
cout << (int)'1'; or int i = (int)'1';
the ASCII value of character '1' is as we said below is 49
cout << i; // 49