关于类型转换:
1.int
如果是超出了int的范围,会溢出
如果超出了太多,报错
如果是一个小数,只会截取整数部分, 不会四舍五入
2.float
如果是一个double类型的小数,double→float
如果是一个int类型的整数,int→float
3.double
如果是一个float,float→double
如果是一个int,int→double
4.char
自动转换的顺序是: char → int → float → double
scanf缓冲区问题
在接收输入的时候,scanf会把所有输入存在缓冲区,依次接收,而不会按照语句中的各个类型进行接收,尤其是数字型数据和字符行数据混合输入的时候,很容易把空格和回车存到字符变量中。
解决办法:
1.定义一个专门的字符串数组或者变量来接收多余的空格和回车
2.利用rewind(stdin);清空缓冲区
面试题1
两数交换不定义temp变量的方法
1.
1 num1 = num1 + num2; 2 num2 = num1 - num2; 3 num1 = num1 - num2;
2.
1 num1 = num1 ^ num2; 2 num2 = num1 ^ num2; 3 num1 = num1 ^ num2;
逗号表达式
逗号表达式的目的,并不是想要前面表达式的结果
如:
int i = 0, j = 1, k = 2;
或者只是想要逗号前面的表达式执行, 然后要最后一个表达式的结果
这时候和分开写没有什么区别, 只是单纯的减少了代码行数;
前面的表达式只要求其执行,并不关心其结果
关心的只是前面的变化完以后,最后一个表达式的结果
复合赋值运算符:
int num += 10 → int num = num + 10; 减法, 乘法, 除法同理;
自增自减运算
++, - -,
- 无论是放在左还是右, 其最后都会+1, 或者-1;
- 在左: 先将自身的值取出来, 作为整个表达式的结果, 然后再自增(减)
- 在右: 先将自增(减), 然后再将自身的值取出来作为表达式的结果
时间: 2024-10-10 05:59:38