当前位置:  开发笔记 > 编程语言 > 正文

C/C++中的字符大小('a')

如何解决《C/C++中的字符大小('a')》经验,为你挑选了4个好方法。

C和C++中的字符大小是多少?据我所知,char的大小在C和C++中都是1个字节.

在C:

#include 
int main()
{
    printf("Size of char : %d\n", sizeof(char));
    return 0;
}

在C++中:

#include 
int main()
{
    std::cout << "Size of char : " << sizeof(char) << "\n";
    return 0;
}

没有惊喜,它们都给出了输出: Size of char : 1

现在我们知道,字符表示为'a','b','c','|',...所以我只是修改了上面的代码对这些:

在C:

#include 
int main()
{
    char a = 'a';
    printf("Size of char : %d\n", sizeof(a));
    printf("Size of char : %d\n", sizeof('a'));
    return 0;
}

输出:

Size of char : 1
Size of char : 4

在C++中:

#include 
int main()
{
    char a = 'a';
    std::cout << "Size of char : " << sizeof(a) << "\n";
    std::cout << "Size of char : " << sizeof('a') << "\n";
    return 0;
}

输出:

Size of char : 1
Size of char : 1

为什么sizeof('a')在C和C++中返回不同的值?



1> 小智..:

在C中,一个字符的类型恒定'a'实际上是一个是int,具有4的大小(或一些其它的实现相关的值).在C++中,类型是char,大小为1.这是两种语言之间的许多小差异之一.


@nthrgeek:我懒得引用这两个标准,但C++标准有一个专门与C不兼容的附录.在附录C.1.1中,它提到"字符文字的类型从`int`变为`char` ,这解释了行为.:)
+1(除此之外,虽然"4的大小"显然适用于nthrgeek的平台,但并不一定适用于所有平台.)
在C++标准中,它是2.13.2/1节,在C 6.4.4.4中,至少在我得到的文档中.
@nthrgeek:你不应该要求标准参考,除非你有一个关于特定点的论点,并且你想要理解为什么另一个人有不同的意见.如果每个人都同意接受它.你(作为开发人员)应该非常聪明,能够快速找到这样的共同答案.
@nthrgeek:§6.4.4.4,第10段:"整数字符常量的类型为int.包含映射到单字节执行字符的单个字符的整数字符常量的值是映射表示的数值字符被解释为整数."

2> David R Trib..:

正如Paul所说,这是因为它'a'intC中的C而不是charC++.

我在几年前写的一些内容中介绍了C和C++之间的具体差异,网址为:http://david.tribble.com/text/cdiffs.htm


只是好奇,但你正在努力更新(非常详细)的文档,以包括C++ 11和C11的新变化?
呃,我用你的工作写了[这个](http://741mhz.com/c-vs-cxx/),你在这里.这么小的世界!

3> Smith..:

在C中,字符文字的类型是C++ 中的intchar.这是在C++中支持函数重载所必需的.看这个例子:

void foo(char c)
{
    puts("char");
}
void foo(int i)
{
    puts("int");
}
int main()
{
    foo('i');
    return 0;
}

输出:

char



4> msc..:

在C语言中,字符文字不是一种char类型.C将字符文字视为整数.所以,sizeof('a')和之间没有区别sizeof(1).

因此,sizeof字符文字等于C中的sizeof整数.

在C++语言中,字符文字是类型char.该cppreference说的:

1)窄字符字面或普通字符文字,例如'a''\n''\13'.这样的文字具有类型char,并且值等于执行字符集中的c-char的表示.如果c-char不能表示为执行字符集中的单个字节,则文字具有int类型和实现定义的值.

所以,在C++中,字符文字是一种类型char.所以,C++中字符文字的大小是一个字节.

Alos,在您的程序中,您使用了错误的格式说明符给sizeof运算符.

C11§7.21.6.1(P9):

如果转换规范无效,则行为未定义.275)如果任何参数不是相应转换规范的正确类型,则行为未定义.

所以,你应该使用%zu格式说明符代替%d,否则它是C中未定义的行为.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有