C 为什么数组的元素比类型大?

C 为什么数组的元素比类型大?,c,char,sizeof,C,Char,Sizeof,我对C相当陌生,在我的一次练习中,我遇到了一些我无法理解的事情。 当我检查tabel元素(这里是“b”)的大小时,我得到4。但是,如果我选中“char”,我会得到1。为什么 # include <stdio.h> int main(){ char tabel[10] = {'b','f','r','o','a','u','v','t','o'}; int size_tabel = (sizeof(tabel)); int size_char = (sizeo

我对C相当陌生,在我的一次练习中,我遇到了一些我无法理解的事情。 当我检查tabel元素(这里是“b”)的大小时,我得到4。但是,如果我选中“char”,我会得到1。为什么

# include <stdio.h>

int main(){
    char tabel[10] = {'b','f','r','o','a','u','v','t','o'};
    int size_tabel = (sizeof(tabel));
    int size_char = (sizeof('b'));
/*edit the above line to sizeof(char) to get 1 instead of 4*/
    int length_tabel = size_tabel/size_char;
    printf("size_tabel = %i, size_char = %i, lengte_tabel= %i",size_tabel,
        size_char,length_tabel);
    }
#包括
int main(){
字符表[10]={'b','f','r','o','a','u','v','t','o'};
int sizeu tabel=(sizeof(tabel));
int size_char=(sizeof('b');
/*将上面的行编辑为sizeof(char),得到1而不是4*/
int length_tabel=大小_tabel/大小_char;
printf(“大小标签=%i,大小字符=%i,长度标签=%i”,大小标签,
大小(字符、长度表);
}

'b'
不是char类型
'b'
是一个文本,它的类型是int

来自C11标准草案(ISO/IEC 9899:201x):6.4.4.4字符常数:说明


整数字符常量是一个由一个或多个多字节字符组成的序列,用单引号括起来,如“x”中所示


'b'
文本是一个
int
。在您当前的平台上,
int
是4个字节。

一个整数字符常量,例如,
'b'
在C中有类型
int

根据C标准:

(c11,6.4.4.4p10)“整型字符常量的类型为int.[…]如果整型字符常量包含单个字符或转义序列,则其值是当具有类型char(其值为单个字符或转义序列的值)的对象转换为int类型时产生的值。”

这与C++字符不同,其中一个整数字符常量具有类型<代码> char < /> >:

(c++11,2.14.3)“包含单个c字符的普通字符文字具有char类型,其值等于执行字符集中c字符编码的数值。”

这将返回表的大小,即sizeof(char)*10


这将返回sizeof(char),即1。

Titel和text不匹配,是吗?可能重复的是重复的吗?所提到的问题实际上是问题的答案,而不是问题的重复。严格来说,
'b'
不是一个文字,而是一个字符常量。这不是说整型字符常量的类型为
int
。如果你读了回答,你就会知道你的解释是错误的。
sizeof(tabel)
sizeof('b')