邪修C语言之常用语法的小细节
switch语句细节switch 条件对象{case 条件1breakcase 条件2break…defaultbreak}上述为switch语法的基本形式但是switch语句中每一个case和default中一定需要加上break;实则不然switch中包含的每一项case包括default后面都无需添加break#includestdio.hintmain(){intmonth1;switch(month){case1:month;case2:month;default:printf(%d,month);}return0;}上述代码中每一个case项包括default都没有break最终程序的打印结果为3这是因为当month1时满足了case 1这一项的条件那么程序就会执行month而对于case 2此时无论month满不满足条件由于上一条语句没有break指令仍然会继续执行month直到后续的case项出现break指令结束switch语句。否则则一直运行到default结束后退出。#includestdio.hintmain(){intmonth1;switch(month){case1:month;case5:month;default:printf(%d,month);}return0;}上述代码中我将case 2换成了case 5:输出结果仍然为3。#includestdio.hintmain(){intmonth5;switch(month){case1:month;case5:month;case7:month2;default:printf(%d,month);}return0;}而对于上述代码month的值等于8这说明对于switch case语句来说对于case的条件项判断只会在开头生效一次找到条件对象满足的case条件后其他case的条件不会再判断而是一直运行后续case中的程序代码知道出现break语句或者运行完default配置项。循环语句细节for (初始化表达式; 循环条件表达式; 循环后的操作表达式) {主体}对于for语句来说初始化表达式; 循环条件表达式; 循环后的操作表达式这三者都可以为空也就是不填。而其中循环条件表达式为空那么for循环就相当于死循环。如果初始化表达式和循环后的操作表达式为空那么便缺少上述流程图中对应的一部分执行块。对于while和do while 语句来说他们唯一的一个重要区别再于在首次执行程序的时候while是先判断条件再执行可能一次循环体中的内容都不执行而do while是先执行再判断起码执行一次即使你一开始设置的条件就不成立。对于{}括号的细节对于一个程序而言一个花括号其实在栈中开辟了一个独属于自己的空间哦。并不是说必须是一个函数的形式才会在栈上开辟自己的空间而是仅仅需要一个{}括号即可。#includestdio.hintmain(){inta0;{intb20;}printf(%d,a);printf(%d,b);}使用上述代码你会发现编译器报错说b这个变量没有被定义。为什么呢其实就是因为{}其实和函数一样都在栈上开辟了自己的私有空间。可以理解为{}括号可以是一个没有变量名形参和返回值类型的一个特殊的函数。在{}中创建的变量在{}结束后就会被释放所以main中就无法访问到这个变量了。在上述代码中{}内打印b则可以正常的打印。除了没有变量名形参和返回值类型之外{}括号与函数还有一个重要的区别那就是它和函数不一样函数想要访问主调函数的内容需要通过传参的方式而直接使用{}则不需要它可以直接访问在自己{}之前创建的变量的内容。#includestdio.hintmain(){inta20;intk30;{intb20;printf(%d,a);printf(%d,k);printf(%d,m);}}如上述{}内是可以正确识别外部的变量的其实从if中的{}和while{}等等语句的{}我们也可以知道这一点。对于括号的细节#includestdio.hintmain(){inta20;for((a-1,a3);a23;a){printf(a);}}对于上述代码来说仅仅打印出了一个a字符为什么因为a-1,a3等价于先执行a-1a3;这两个语句。在此处逗号代表着顺序执行也就是连续执行这两个语句。和我们使用int a3,b4;一样。int a3,b4;等价于int a3int b4那么如果将a3改为a4结果是什么呢