C中“3”和“3”之间的差异

我尝试在C中运行以下程序并获得一些输出。 你能帮帮我吗?

#include int main() { char x='A'; printf("%d%d%d",sizeof("3"),sizeof('3'),sizeof(3)); return 0; } 

在ubuntu 11.04 32位中使用gcc收到的输出为2 4 4。

同样在其他计划中: –

 #include int main() { char x='A'; printf("%d%d",sizeof('A'),sizeof(x)); return 0; } 

在ubuntu 11.04 32位中使用GCC收到的输出为4 1。

你能帮我解决为什么输出是这样的吗???

在C中, char文字是整数类型,因此sizeof('3') == sizeof(int) 。 有关详细信息,请参阅此C FAQ 。

这是C和C ++不同的领域之一(C ++ sizeof('3')1 )。

实际上,纠正我之前的断言sizeof("3")将产生2,因为“3”被视为2元素字符数组。

6.3.2.1/3

除非它是sizeof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则将类型为”array of type”的表达式转换为类型为”指针的表达式type”指向数组对象的初始元素,而不是左值。

在C.

3 :整数文字,输入int
'3' :char literal,输入int
"3" :字符串文字:类型char[2]

在第二个示例中, x表示char类型的对象。

‘3’转换为int类型,即4个字节。 但是“3”是一个包含两个字节的字符串。 第一个字节是char 3,第二个是附加到所有字符串的空终止符。

“C”是

 char mystring[2]; mystring[0] = 'C'; mystring[1] = '\0'; 

虽然’C’是

 int mychar; mychar = 'C'; 

'3'是一个字符常量。 在C中,字符常量具有int类型(在C ++中,它们具有char类型)。 因此, sizeof '3' == sizeof (int)

"3"是一个字符串文字。 它是一个2元素的char数组(C ++中的const char ),其值为{'3', '\0'}sizeof (char) == 1根据定义,因此, sizeof "3" == 2。

3是整数常数。 它有int类型。 因此, sizeof 3 == sizeof (int)

变量x声明为char ,因此sizeof x == 1。