我对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);
}
答案 0 :(得分:6)
'b'
不是char类型。 'b'
是一个文字,它的类型是int。
来自C11标准草案(ISO / IEC 9899:201x):6.4.4.4字符常量:描述
整数字符常量是用单引号括起来的一个或多个多字节字符的序列,如'x'。
答案 1 :(得分:5)
'b'
字面值为int
。在您当前的平台上,int
为4个字节。
答案 2 :(得分:3)
整数字符常量,例如'b'
在C中具有类型int
。
来自C标准:
(c11,6.4.4.4p10)“整数字符常量的类型为int。[...]如果整数字符常量包含单个字符或转义序列,则其值是当具有类型的对象时产生的值char的值是单个字符或转义序列的值转换为int类型。“
这与C ++不同,其中整数字符常量的类型为char
:
(c ++ 11,2.14.3)“包含单个c-char的普通字符文字具有char类型,其值等于执行字符集中c-char编码的数值。 “
答案 3 :(得分:1)
sizeof(tabel)
这将返回tableof sizeof(char)* 10
的大小sizeof('b')
这将返回sizeof(char),它是一个。