char可以多长时间?

时间:2011-11-21 14:24:24

标签: c

为什么int a = 'adf';在C中编译并运行?

4 个答案:

答案 0 :(得分:8)

文字'adf'多字节字符常量。它的价值取决于平台。不要使用它。

例如,某个平台的32位无符号整数可以取值0x00616466,而另一个平台可以取0x66646100,而另一个平台可能是0x84860081。 ..

答案 1 :(得分:2)

正如Kerrek所说,这是一个多字节字符常量。它的工作原理是因为每个字符占用8位。 'adf'是3个字符,即24位。 int通常足以包含此内容。

但上述所有内容都依赖于平台,并且可能因架构而异。这种东西仍然用在古老的Apple代码中,不太记得在哪里,虽然文件创建者代码响铃。

请注意"'之间的语法差异。

char *x = "this is a string. The value assigned to x is a pointer to the string in memory"

char y = '!' // the value assigned to y is the numerical character value of the character '!'

char z = 'asd' // the value of z is the numerical value of the 'string' data, which can in theory be expressed as an int if it's short enough

答案 2 :(得分:0)

它的工作原理只是因为“adf”是3个ASCII字符,因此长3个字节,您的平台是24位或更大的系统。例如,它会在16位系统上失败。

值得记住的是,虽然sizeof(char)总是会返回1,但依赖于平台和编译器,可以将超过1个字节的内存空间分配给char,因此

struct st 
{
int a;
char c;
};

当你:

sizeof(st)许多32位系统将返回8。这是因为系统会将char c的单个字节填充为4个字节。

答案 3 :(得分:-1)

ASCII。每个角色都有一个数值。如果您需要更多信息,请参阅本教程的中间部分http://en.wikibooks.org/wiki/C_Programming/Variables

Edit_的 _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ____

char letter2 = 97; /* in ASCII, 97 = 'a' */

有些人认为这是非常糟糕的做法,如果我们用它来存储一个字符,而不是一个小数字,如果有人读你的代码,大多数读者被迫查找哪个字符对应的数字97在编码方案中。最后,letter1和letter2存储了相同的东西 - 字母“a”,但第一种方法更清晰,更容易调试,而且更直接。

值得一提的是,数字的字符与其对应的数字不同,即“1”不等于1.