一:关于a++与++a
①:无论++在前还是++在后,a本身都会加1.
②:++a,a本身会自增1,它的返回值(结果)是a+1;
③:a++,a本身会自增1,它的返回值(结果)是原来的a值。
④:a--和--a同理.
二:关于sizeof
①:sizeof 作用于常量和变量时,格式为:sizeof 常量 / sizeof(常量) sizeof 变量名称/ sizeof(变量名称)
②:sizeof作用于数据类型时,格式为:sizeof (数据类型);
③:数据类型本身是不占用存储空间的,而是此类型的数据占用存储空间。sizeof作用于数据类型,表示此数据类型的常量或变量所占用的存储空间。且()不可省略.
三:并不知道c中还可以这么写,虽然并没有什么意义,开发中不会常见的我觉得.
int result=5>6<4<3;
printf("%d\n",result); //1
比较运算符的结合性是从左到右的.
int result=5==5<4;
printf("%d\n",result); //0
> < >= <= 优先级高于 != ==.
int a=10;
double b=20.0;
int result= a<b;
printf("%d\n",result);
为什么a,b是不同类型,却可相互比较。由于int 类型的a 发生了自动类型转换(类型提升)为double a=10.0,之后与b进行比较.
四:①:原本以为结果是0.
int result =2&&1;
printf("result=%d\n",result); // result=1
在c语言中,所有的数值都是有真假的,所有的非零的数都为真,只有0为假.(-1也是真).
②:原本以为结果为:result =0 a=0 .实际为:result=0 a=1;
int result;
int a=1;
result=a-- &&a++&&a--;
printf("%d,%d\n",result,a); // 0 1
&&:一假则假。当第一个a-- , a变为0,但返回值为1,a++时a变为1,但返回值为0,即停止运算。即a-- 并没有参与运算。
③:如下
int result ;
int a=10;
int b=12;
result =a>b || b>a &&0;
printf("result=%d\n",result); // result=0并无疑问
当:result= b>a || a>b &&0;
printf("result=%d\n",result); //result=1 。 此时以为原因是&&优先级高于||
但当:result = b>a || a++ >b&&0;
printf("result=%d,a=%d\n",result,a); //得知原因是||一真则真。与优先级无关。在计算机中,优先级高并不意味着先计算,而是先结合,作为整体存在.
五: 三目运算符与if的分别使用场景:
1:如果条件的比较较简单, 并且一定有返回值,才能使用三目运算符。
2:在所有的分支结构中,if语句是最灵活的,当判断条件较复杂或 无返回值时,可用if。
六:switch:注意点 & 与if的使用场景:
1.switch后面的小括号中只能是一个整型的表达式.
2.当某个变量只有几个固定取值时,使用switch更简洁。如果是表示区间(不确定取值数或取值较多),就用if。
3.在case后面的语句中不能直接定义变量,如果要定义变量,必须加上大括号{ },来明确变量的作用域。
若:
case 11:
printf(" ..... ");
int num=8; // 尽管编译器不报错,也不能这么写 ,这是编译器本身的bug.
break;