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

时间:2014-07-15 11:32:30

标签: 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 = (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);
    }

4 个答案:

答案 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),它是一个。