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

标签 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,但它显示为输出:

1
49

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

最佳答案

std::cout << a <<std::endl;

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

std::cout << int('1') <<std::endl;

显示char '1'作为int (由于显式强制转换),所以您会看到对应的 ASCII 索引 49反而。那是因为对于算术类型,成员 std::basic_ostream& operator<< 取而代之的是。

注意你的行

a = int(a);

什么都不做,它不会改变 a 的类型至 int ;它只是将 RHS 转换为 int然后分配回 int到原文char (显然没有数据丢失)。在 C 或 C++ 中,类型在编译时是一成不变的。

关于c++ - 将单个字符传递给 C++ 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41227393/

相关文章:

c++ - 看不懂这段代码?

c++ - 计算序列的第 n 项。为什么我会收到编译器错误?

c++ - UB是否可以重用对象的存储而不先破坏它?

c++ - XORing "Hello World!"切断字符串

c++ - Boost:asio 获取异常

c - 当不支持重载函数时,C 中的 math.h 函数如何接受多种类型的参数?

c++ - 分部测量

c++ - 如何使用 stringstream 作为 C++ 函数的参数?

javascript - 使用 JavaScript 获取 JSON 以在页面上显示

c++ - 在 64 位操作系统上使用 32 位编译器编译的 64 位 float