数据类型、常量、变量及运算符
浮点常量:+-M.N
1.176e+10=1.176*10的10次方
-3.5789e-8=-3.5789*10的负8次方
可以将字符常量看成一个字节的正整数
字符串常量和字符常量:字符串常量的结尾自带'\0'
%#x :为16进制数自动添加0x前缀
static:默认变量为0,静态储存变量,可在函数内也可以在函数外,局部使用时,内存中以固定的地址存放,只要程序没结束,就不会随着说明它的程序段的结束而消失,它下次再调用该函数,该存储类型的变量不再重新说明,而且还保留上次调用存入的数值。
extern:当变量在一个文件中的函数体外说明,所有其他文件中的函数或程序段都可引用这个变量。
此两个变量区别在于static修饰的全局变量,其它文件无法使用
auto说明的变量只能在某个程序范围内使用,通常在函数体内或函数中的复合语句里。
register为寄存器型,将变量放入cpu寄存器,加快运行速度。且不能用&(取址符)获取此变量地址。
float和double不能取余
逻辑运算符:! && ||
遇假&&假
遇真||真
&&逢0截止
||逢1截止
输入输出
c语言中,putchar('\n')输出一个换行符为什么用一个单引号而不用双引号?
字符串使用双引号,字符使用单引号,puchar为char字符类型。
输入函数的垃圾处理:
1.使用getchar()
2.使用scanf(" %c",&c),及在%号前加一个空格
3.使用scanf("%*c%c",&c)
gets与scanf的不同在于gets函数并不以空格做为字符串输入结束的标志。
控制语句
控制语句:
分支 if else switch
循环 for while do while goto
辅助控制 continue break return
语句块:当有多条语句时,注意用{}括起来
表达式:一般为逻辑表达式或者关系表达式
也可以为任意类型(整型,实型等)
要注意区分if(x=1)和if(x==1)的区别
枚举关键字enum
例如 enum weekday{sun,mon,tue} a;
break:强制退出switch体
使用goto的优势:当函数有多个出口时,使用goto把这些出口集中到一处是很方便的,同时,它的无条件跳转易于理解,可以减少嵌套,可以避免那种忘记更新某一个出口点的问题,算是帮助编译器做了代码优化。
利用goto和while实现循环输入:

while

goto
break:用于从循环体内跳出循环体,提前结束循环。break只能用在循环语句和switch语句中。break提前结束一层循环。continue 和 break区别在于:continue只结束本次循环,而break终止本层循环。
数组和字符串
对于地址和指针的访问使用%p
C语言对数组不作越界检查
数组必须以元素为单位
二维数组定义:声明一个二维数组时,列数不能省略,行数可以
当使用的不是for循环输出一串字符数组时,要注意字符数组是否以\0结尾
C语言中没有字符串变量,用字符数组处理字符串。字符串的结束标志:'\0'
sizeof:计算字符串空间数
strlen:计算字符串到\0截止
字符串长度函数strlen:计算字符串长度,返回字符串实际长度,不包括'\0'在内,\xhh表示十六进制数代表的符合,\ddd表示8进制
strcpy:拷贝一个字符串到字符数组中
返回值位字符数组的首地址
目标字符数组必须够大,且拷贝过程中'\0'一同拷贝
strcat:将字符数组2链接到数组1的后面,返回数组1的首地址。链接前两个数组均以\0结尾,链接后串1的取消。
strcmp:比较两个字符串,将两个字符串从左至右逐个比较,比较ASCII值,直到遇到不同的字符或者\0位置,若字符串1>字符串2,返回正整数,若字符串1<字符串2,返回负整数,
若字符串1=字符串2,返回0
strchr:在字符串中找到第一个目标字符的地址
strrchr:在字符串中找到最后一个目标字符的地址
strcasecmp:忽略大小写比较字符串
strstr:查找指定长串中的子串
isalpha():检查是否为字母字符
isupper():检查是否为大写字母字符
islower():检查是否为小写字母字符
isdigit():检查是否为数字
tolower():转换为小写字符
toupper():转换为大写字符
指针
在计算机的内存中,每一个字节单元都有一个编号,称之为地址。
如果指针指向的区域是程序中的一个变量的内存空间,那么这个变量称为指针的目标变量,简称为指针的目标。
*p = *(&x) = x
p :指针变量,是地址量
*p :指针所指向的对象,内容是数据
&p :指针变量占用的储存区域的地址,是个常量
向一个指针变量赋值时,赋的值必须是地址常量或者指针变量,不能是普通的整数
两个指针相减不是两个指针持有的地址值相减的结果,而是一个整数值,表示两个指针之间相隔数据的个数。
*p++:++先进行运算,但是做为后缀表达式,最终的值还是运算之前的值
a[i] = *(p+i) = *(a+i) = p[i]
对于二维数组和指针,a[i][j] = (*p)[j]
二维数组中,a[i]是以行进行遍历,而*p[i]则是进行逐个遍历
a[i][j] = p[i][j] = *(*(a + i) + j) = *(*(p + i) + j)
a[i]是常量,而p[i] 则是变量