【c语言】学习笔记
- 操作数:运算符的作用对象
- 运算符分类:单目运算符(一个操作数)、双目运算符(两个操作数)、三目(唯一一个)
- 短路求值(最小化求值):一种逻辑运算符的求值策略,c语言中逻辑与和逻辑非采用短路求值。简单来说就是从左到右判断,只要能得出逻辑表达式的结果就停止判断直接得出答案。
例子:
#include <stdio.h>
int main(){
int a = 5 , b = 3;
(a = 0) && ( b = 5 );
printf("a = %d , b = %d",a,b);
return 0;
}
a = 0 , b = 3
--------------------------------
Process exited after 0.02684 seconds with return value 0
请按任意键继续. . .
- 5 / 3 = 1 整型除以整型,结果为整型,直接舍弃小数。
- 10 / 6.0 = 1.666667 // 结果为无限循环小数,小数点后第六位四舍五入。
- 求余运算符两边要求均为整型。
- 定义数据类型时其实定义了该数据占用内存的大小,字符char类型一个字节,整型int 4个字节
#include <stdio.h>
int main()
{
unsigned char a, b, c;
b = c = 200;
a = b + c;
printf("a = %u\n", a);
return 0;
}
输出为144(下边括号内数字表示进制)
200(10) = 1100 1000(2)
1100 1000(2) + 1100 1000(2) = 1 1001 0000(2)
由于 char 类型占一个字节(8 位),因此舍弃掉最前边的进位,结果为 1001 0000(2) = 144
-
count != 0 && sum/count
这个语句确保除数不为0,当除数为0时就不会计算sum / count -
getchar();
从标准输入流中获取下一个字符,返回的是int型,可以在连续多次输入字符时过滤掉回车 。
int ch;while((ch = getchar()) != '\n'){...}
-
else悬挂:c语言中,else始终与最接近它的if匹配,解决办法:加上大括号。
-
小技巧:用逻辑运算符“==”时,可以把两个操作数的位置对调一下,这样漏写一个等于号时会有报错,方便调试。
例如if('Y' == letter)
-
long long int 对应 %lld
-
注意i++和++i在赋值时的区别:
#include <stdio.h>
int main(){
int i = 6 , j ;
j = i++;
printf("i = %d , j = %d\n" , i , j);
i = 6;
j = ++i;
printf("i = %d , j = %d\n" , i , j);
return 0;
}
i = 7 , j = 6
i = 7 , j = 7
--------------------------------
Process exited after 0.02408 seconds with return value 0
请按任意键继续. . .
- 逗号运算符:从左到右依次计算表达式的值,赋值时取最后一个表达式的值。(不是所有逗号都是逗号运算符,有些只是分割符)
a = (b = 3 , (c = b + 4) + 5) //先将b赋值为3,再将c赋值为b+4也就是7,接着把c的值加上5,最后赋值给变量a,也就是12
- c语言中唯一一个三目运算符
语法:exp1 ? exp2 : exp3;
exp1是条件表达式
如果为真,则返回exp2
如果为假,则返回exp3
举一个简单例子
if (a > b){
max = a;
}
else{
max = b;
}
上面的代码块可以替换为下列形式。
max = a > b ? a : b;
- goto语句
语法:goto 标签; //标签定位于某个语句前边
举个例子:
#include <stdio.h>
int main(){
int i = 5;
while (i++){
if (i > 10){
goto A;
}
}
A: printf("Here! i = %d\n",i);
return 0;
}
Here! i = 11
--------------------------------
Process exited after 0.04045 seconds with return value 0
请按任意键继续. . .
一般用在跳出多层循环,但是我们要尽量避免使用goto语句,因为它容易破坏代码的逻辑性。
- 注释
//注释
/*多行
注释*/