C/C++ 中的单引号、双引号和大小 ('a')

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

本文关键字:C++ 单引号      更新时间:2023-10-16

我正在研究 C 或 C++ 中的单引号与双引号问题。我无法完全理解给出的解释,所以我写了一个程序:

#include <stdio.h>
int main()
{
  char ch = 'a';
  printf("sizeof(ch) :%dn", sizeof(ch));
  printf("sizeof('a') :%dn", sizeof('a'));
  printf("sizeof("a") :%dn", sizeof("a"));
  printf("sizeof(char) :%dn", sizeof(char));
  printf("sizeof(int) :%dn", sizeof(int));
  return 0;
}

我使用 gcc 和 g++ 编译了它们,这些是我的输出:

海湾合作委员会:

sizeof(ch)   : 1  
sizeof('a')  : 4  
sizeof("a")  : 2  
sizeof(char) : 1  
sizeof(int)  : 4  

G++:

sizeof(ch)   : 1  
sizeof('a')  : 1  
sizeof("a")  : 2  
sizeof(char) : 1  
sizeof(int)  : 4  

g++ 输出对我来说很有意义,我对此没有任何怀疑。在 gcc 中,有什么需要sizeof('a')才能与sizeof(char)不同?这背后有什么实际原因,还是只是历史原因?

同样在 C 中,如果 char'a' 的大小不同,这是否意味着当我们写 char ch = 'a';,我们正在进行隐式类型转换?

在 C 中,字符常量(如 'a')的类型为 int,在 C++ 中为 char

关于最后一个问题,是的,

char ch = 'a';

导致int隐式转换为char

因为没有字符,只有 intgers 链接 int 一个字符

就像一个是62我猜

如果你尝试printf("%c",62);你会看到一个字符