数据类型
注意事项:
- 大字节赋给小字节,会发生截断的情况
#include <stdio.h>
int main()
{
char i = 0;
i = 0x12345678;
printf("i = %c", i);
return 0;
}
输出
test.c:6:6: warning: overflow in conversion from 'int' to 'char' changes value from '305419896' to '120' [-Woverflow]
i = 0x12345678;
^~~~~~~~~~
i = x
可见数据被截断,只赋值了后两个数字。
看看其余的值。
#include <stdio.h>
int main()
{
char i = 0;
int *p;
p = &i;
i = 0x12345678;
printf("i = %x\r\n", i);
// p--;
printf("p = %x\r\n", *p);
return 0;
}
输出
test.c:8:6: warning: overflow in conversion from 'int' to 'char' changes value from '305419896' to '120' [-Woverflow]
i = 0x12345678;
^~~~~~~~~~
i = 78
p = 61fe1778
数据丢失了。
- 小字节赋给大字节,会覆盖大字节所有的内容,可以说进行了隐式转换。
#include <stdio.h>
int main()
{
char i = 'a';
int j = 0x12345678;
printf("befor j = %x\r\n", j);
j = i;
printf("after j = %x\r\n", j);
return 0;
}
输出
befor j = 12345678
after j = 61
显然,变量j的所有内容都被覆盖了。
可以这么看j = (int)i;
- 变量与常量的区别
5678
after j = 61
显然,变量j的所有内容都被覆盖了。
可以这么看j = (int)i;
3. 变量与常量的区别
变量可变,常量不可变。存放的区域不同。