C++:可以为一个 int 分配一个 char* 吗?

标签 c++ linux casting char

我正在阅读 Advanced Linux Programming 的第 2 章:
http://www.advancedlinuxprogramming.com/alp-folder/alp-ch02-writing-good-gnu-linux-software.pdf

2.1.3 使用 getopt_long 部分,有一个示例程序,大致如下:

int main (int argc, char* argv[]) {
  int next_option;
  // ...
  do {
    next_option = getopt_long (argc, argv, short_options, long_options, NULL);
    switch (next_option) {
       case ‘h’: /* -h or --help */
       // ...
    }
    // ...

引起我注意的一点是 next_option 被声明为一个 int。函数 getopt_long() 显然返回一个 int 表示短命令行参数,该参数在以下 switch 语句中使用。为什么这个整数可以与 switch 语句中的字符进行比较?

是否存在从 char(单个字符?)到 int 的隐式转换?上面的代码如何有效? (查看链接 pdf 中的完整代码)

最佳答案

C 和 C++ 都没有可以将“字符”存储为具有某些专用字符特定属性的值的类型。从这个意义上说,C 和 C++ 中都没有“字符”类型。

在 C++ 和 C 语言中 char是一个整体类型。它包含数字。它只是一个最小的(就范围而言)整数类型。 char之间的转换和 int存在,就像它存在于 int 之间一样和 longintshort . char在其他整数类型中没有特殊地位(除了 char 类型与 signed char 类型不同的事实)。

'h' 形式的文字在 C++ 中有类型 char , 但与任何其他整数类型一样,它与 int 相当.这就是为什么您可以在 case 中使用它的原因标记它在您的原始示例中的使用方式。

换句话说,您的原始代码与

switch (next_option) {
       case 1L: ...
       // ...
    }

会。在这种情况下 switch参数是 int , 但案例标签是 long .代码有效。你觉得奇怪吗?可能不会。你的例子 'h'差别不大。

关于C++:可以为一个 int 分配一个 char* 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3593764/

相关文章:

c++ - Qt中星型系统数据结构的实现

c++ - 使用boost的多线程一位读者和一位作者

c++ - C++中的继承和指针

linux - ssh 连接产生了数百个 ssh-agent/bin/bash 实例

java - 如何在此对象中应用多态性

c# - 通用协方差解决方法?

c# - 如何在 native C++ 程序中托管 WCF 服务

c - C语言中的asprintf函数,它有什么作用?

linux - 我想每分钟自动使用脚本 chmod 这是我的脚本吗?

java - long mod 操作返回 int Java