C 为什么数组的元素比类型大?
我对C相当陌生,在我的一次练习中,我遇到了一些我无法理解的事情。 当我检查tabel元素(这里是“b”)的大小时,我得到4。但是,如果我选中“char”,我会得到1。为什么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
# 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')