c - c中单引号中两个字符的用法

标签 c

         #include<stdio.h>

         int main()
         {

           char ch = 'A';

           printf("%d\n",'ag');

           printf("%d\n",'a');

           printf("%d, %d, %d, %d", sizeof(ch), sizeof('a'), sizeof('Ag'), sizeof(3.14f));

          return 0;
         }

我以前在g++和gcc上跑的时候对这道题的输出有很多疑惑。

但我已经通过引用这些链接消除了几乎所有的疑虑:

  1. Single, double quotes and sizeof('a') in C/C++

  2. Single quotes vs. double quotes in C or C++

关于这个问题的输出,我还需要了解一件事。

谁能解释一下程序中上面提到的 printf("%d\n",'ag'); 的输出。它实际上是如何存储在内存中的?

程序在 Linux/GCC 平台上的输出是:

24935
97
1, 4, 4, 4

最佳答案

单引号文字的类型是int。因此,大小通常足以容纳多个字符的位。据我所知,解释字符的确切方式取决于实现。

在您的例子中,您得到的是小端顺序:

  • 'a' 的 ASCII 值为 97 (0x61)
  • 'g' 的 ASCII 值为 103 (0x67)

您的值为 24935 = 0x6167,因此您将在高字节中获得 'a',在低字节中获得 'g'

关于c - c中单引号中两个字符的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12212668/

相关文章:

c - 如何确定程序可以使用 unsigned long long 计算阶乘的最大值?

嵌套循环获取素数的C程序

c - GCC 计算 goto 和堆栈指针的值

c - 如何访问 C 变量以进行内联汇编操作?

c - 关于实现多链表

基于外部库的PHP扩展

c - C 中允许用户搜索已排序名称列表的程序卡住

c - 将可变数量的参数传递给 C 函数

c - 访问postgres的共享内存

c - C 数组内的范围