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

M-J*_*M-J 3 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';
}
Run Code Online (Sandbox Code Playgroud)

根据ASCII表,'1'的整数是49,所以我的Func函数中的两个命令都必须显示相同的东西,即49,但它显示为输出:

1
49
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?谢谢.

vso*_*tco 10

std::cout << a <<std::endl;
Run Code Online (Sandbox Code Playgroud)

显示1自s作为非成员运算符std::basic_ostream& operator<<重载,char并显示其对应的ASCII值.另一方面,

std::cout << int('1') <<std::endl;
Run Code Online (Sandbox Code Playgroud)

显示char '1'int(由于显式强制转换),因此您可以看到相应的ASCII索引49.那是因为对于算术类型而言,std::basic_ostream& operator<<正在拾取成员.

请注意你的路线

a = int(a);
Run Code Online (Sandbox Code Playgroud)

没有做任何事情,它不会改变的类型aint; 它只是将RHS转换为int然后将其分配int给原始char数据(显然没有丢失数据).在C或C++中,类型在编译时设置为一成不变.