一、常用printf转换描述
平时很少用的几个点:
%ld 表示长整型 long int
%%---输出%
%o---输出八进制
%o和%#o的区别:
%#o更让我们清楚八进制的形式
%x和%#x打印十六进制也是如此、
%md是我们常见的转换描述。默认右对齐,前面加上-负号就是左对齐,我们在打印99乘法表时,-2d就是表示左对齐,每个数字占2个宽度
%m.nf不太常见,m表示占几个宽度,n表示小数点后位数(值得注意的是,若小数位数比规定小数点后位数长,需要截断,按照四舍五入!)这也是C语言唯一一个需要四舍五入的地方!
tip:小数点算一位!
总结:看.后面的数!
经典例题:
二、表达式
1、关系表达式
a、关系表达式的数值只能是1(真)或0(假)
如果9>8这个关系表达式是真的,所以9>8这个表达式的数值就是1
b、考试易错题:
关系表达式的优先级是从左到右,1<0为假,返回值就是0,而0<2为真,返回值就是1,所以总表达式输出结果就是1!
2、条件表达式:
表达式1?表达式2:表达式3
考试口诀:真前假后。
当表达式1的值是非0时,采用表达式2,当表达式1的值就是0时,采用表达式3
3、break和continue的差别
break是打破的意思,(破了整个循环),所以看见break就要退出整个一层循环。
continue是继续的意思(继续循环),但是要结束本次循环,就是循环体内部的语句不再执行,跳到循环开始,进行新一轮的循环。
4、不停的输入,直到输入#停止输入
while((x=getchar())!='#')
5、经典考题
首先明确while()括号里面不为0就是真,为0就是假,跳出循环。
解题思路:
第一个先--,k为0,跳出循环,所以只减了一次;第二个先使用,发现等于一,需要再次--,一共经历了两次--,最后结果就是-1
三、指针经典考题
a、
*p++和(*p)++的区别
前者本质是地址++,后者p的本身的值会++
*p++,意味p指向首元素地址,而*p++本质是地址++,所以就变成第二个元素的值,---3
(*P)++本质是值++,所以1++就变成2
b、
p和*p的区别
p的本质是地址,而*p表示地址里面的值!
c、
二级指针
解答:把*q看成一个指针整体,所以*q就表示p的地址,而**q才表示p地址里面存放的值7!
值得注意二级指针只能存放一级指针的地址,不能存放变量的地址!