将单个字符传递给C ++中的函数

时间:2016-12-19 16:52:20

标签: c++ function

我在网上搜索了我的问题,我知道从函数返回数组值到我们的主函数(或任何其他函数,无论如何)我需要使用指针(它可以用各种方法完成) ,我也可以用它们来解决我的问题,但是,我仍然很好奇为什么我的程序在一个意想不到的行为(当然对我来说!)的方式,我是一个初学者所以请详细解释你可以,这是我的小程序:

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

我在这里缺少什么?感谢。

3 个答案:

答案 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