一、待转换的值和目标类型不匹配
- (1)目标类型是无符号类型,且待赋的值是整数时,额外的位将被忽略。例如:目标类型时8位unsigned char,待赋的值时原始值求模256
- (2)如果目标类型是一个有符号的整数,且待赋的值是整数,结果因实现而异
- (3)如果目标类型是一个整数,且待赋的值是浮点数,该行为是未定义的。
- 浮点值被转换为整数类型会进行截断,例如:26.325截断为26
#include<stdio.h>
int D26_1_conver(void) {
char ch;
int i;
float fl;
fl = i = ch = 'C';
printf("ch=%c,i=%d,fl=%2.2f\n", ch, i, fl);
ch = ch + 1;
i = fl + 2 * ch;
fl = 2.0 * ch + i;
printf("ch=%c,i=%d,fl=%2.2f\n", ch, i, fl);
ch = 1107;
printf("Now ch=%c\n", ch);
ch = 80.89;
printf("Now ch = %c\n", ch);
return 0;
}
二、强制类型转换
- 和Java一样,用(类型)变量名进行强制转换
三、sizeof
- 获取器右侧运算对象的大小(以字节为单位),运算对象可以是一个被圆括号括起来的类型说明符,如:sizeof(float), 或者是一个具体的变量名、数组名等,如:sizeof foo
四、带参数的函数
- 下面这种传递参数在Java中好像是不允许的,因为Java中是有“多态”特性的,如果可以的话,那么Java的多态不管用了
#include<stdio.h>
void pound(int n);//ANSI函数原型声明
int D26_2_pound(void) {
int times = 5;
char ch = '!'; //ASCII码是33
float f = 6.0f;
pound(times); //int类型的参数
pound(ch); //和pound((int)ch);相同
pound(f); //和pound((int)f);相同
return 0;
}
void pound(int n) { //ANSI风格函数头
while (n-- > 0) {
printf("#");
}
printf("\n");
}
在ANSI C之前,C使用的是函数声明,而不是函数原型。函数声明只是指明了函数名以及返回类型,没有指明参数类型,为了向下兼容,C现在允许void pound();//ANSI C之前的函数声明,如果不加int n,那么程序中pound(f)会失败
五、源码:
- D26_1_conver.c
- D26_2_pound.c
https://github.com/ruigege66/CPrimerPlus/blob/master/D26_1_conver.c
https://github.com/ruigege66/CPrimerPlus/blob/master/D26_2_pound.c
- CSDN:https://blog.csdn.net/weixin_44630050
- 博客园:https://www.cnblogs.com/ruigege0000/
- 欢迎关注微信公众号:傅里叶变换,个人账号,仅用于技术交流