#include
int main()
{
char a=(char)"321";
int i = (int)"321";
printf("a=0x%x; a=%cn", a, a);
printf("i=0x%xn", i);
}
直接看看反汇编代码即可:
; COMDAT ??_C@_03NNJHEBOA@321?$AA@
CONST SEGMENT
??_C@_03NNJHEBOA@321?$AA@ DB '321', 00H ; `string'
CONST ENDS
...
; 5 : char a=(char)"321";
mov eax, OFFSET ??_C@_03NNJHEBOA@321?$AA@
mov BYTE PTR _a$[ebp], al
; 6 : int i = (int)"321";
mov DWORD PTR _i$[ebp], OFFSET ??_C@_03NNJHEBOA@321?$AA@
首先i中存的是字符串常量"321"的地址,(char)"321";仅仅是将常量"321"的地址的第8位赋值给了a。
这个运行的结果与你字符串常量中的内容没有任何关系。