单引号和双引号的区别:
双引号:”“字符串(以\0结尾)
单引号:’符号‘等价于该符号的ASCII码值
EOF与while循环语句
EOF:
EOF通常定义是-1,并且是stdio中一个宏。
什么时候会出现EOF(end of file)?
当你尝试读取一个文件,读到文件末尾时候,通常返回EOF
作用:弥补scanf的不足(scanf在读取字符串时候,通常不读取特殊符号。利用eof去判断是否读取到末尾)
(数组不用加&,因为数组本身结束内存地址,%99s用来限制输入大小)
该程序无法输入getchar()
因为password含有的字符串末尾是\n
scanf实际知读取数子和字母,所以\n不会被读取,留在缓冲区,getchar读取缓冲区的\n,而跳过人为输入
解决办法:
用while((ch=getchar())!=EOF)语句将缓存区的非\n字符清空,然后再去正常输入
缓存区清空:
循环语句
if1=5是将5赋值给i,然后判断i小于等于10,i+1=6,i在被赋值5,所以打印为5
函数:
strcpy(string.h)
strcpy(地址符1,地址符2)将地址符2内容拷贝到1中
memset(地址符,int value(可以是‘’单引号括的ascii),想替换的长度)
导入静态库:program comment(lib,“文件名”)
传值调用和传址调用:
传值调用:形参改变不影响实参
传址调用:形参改变影响实参
函数的链式访问
问:当多个printf函数多次链式访问时,为什么打印结果为4321?
因为printf返回值为打印数的个数
第一次使用printf时1,打印43(2个)
所以,第二次使用printf,打印为2(1个)
所以,第三次使用printf,打印为1
数组:
*pre储存的是数组下标最小的数的地址,解引用后就是arr【0】
(pre指代地址,*pre指代解引用后的数字)
二维数组的创建:
arr1是1234\n5670\n0000
arr2是1200\n2300\n0000
打印
方法一:
方法2
源码,反码,补码:
负数:反码是源码符号不变,其他位变号;补码是反码加一
正数:源码等于反码等于补码
&的计算(按2进制位计算)
同一位若都为1,则为1。反之为0
|的计算
同一位只要有1,则为1.反之为0
^的计算
同为0,异为1
a^a=0;a^0=a
问,如何利用^实现整数ab的交换
如果只要实现一个整数的交换:a=b^a^a;b=a^b^b
由于他们都有a^b
所以:
连续赋值
如何避免野指针:
方法一:int a=10;int *p=&a
方法二:int *p=NULL(一定要大写)
如何利用指针打印数组?
数组这指针相减:
能够相减的前提:指针类型一样
打印为下标差