C语言
基础知识
-
C程序由源文件编译生成目标文件
-
结构化程序的三种基本结构
循环结构、选择结构、顺序结构
-
标识符
关键字、预定义标识符、用户标识符
预定义标识符:系统类库名、系统常量名、系统函数名
-
整型常量
十进制:0~9
八进制:0开头,0~7,如024
十六进制:0x开头,0~15,如0x24
-
实型常量
十进制小数:小数点两边必须有数字(至少一边有数)
指数:e前必须有数字,e后必须为整数
-
字符常量
字符常量可以参与任何整数运算
转移字符是特殊的字符常量
\ddd:八进制数代表的一个ASCII码
\xdd:十六进制代表的一个ASCII码
-
符号常量
#define N 20
的N不需要设定常量的类型
在主函数其值不能再被定义
-
字符串常量
字符串自带
'\0'
,这是与字符不同的地方。所以申请内存也要多申请一个不能用字符串常量对字符数组名进行整体赋值
赋值要用
strcpy()
,注意空间大小是否够可以直接对字符指针赋值,改变字符指针存放的地址
字符指针也可以用
strcpy()
,不过要开辟空间
运算符
-
sizeof
sizeof(double)
是一个整型表达式,其返回一个无符号整数 -
,
逗号运算符从左到右计算,且先赋值
c = (a += ++b, b += 4);
括起来后c的值为最后(最右)表达式的值 -
%
运算对象必须为整数
-
=
赋值运算符左边必须是一个变量
-
位运算
对象只能是整型或字符型数据,不能是实型数据
-1的补码是ff,所以~0就是-1
基本语句
-
如果要输出"%",则应该用"%%"表示
-
复合语句也被称为语句块,它可以由任意条语句构成,也可以一条没有
-
printf
格式
%md
,超过m位按实际位数输出格式
%1.3f
,小数只输出3位,四舍五入 -
scanf
输入格式中不能出现其它非法字符,如
%d,%d
,中间不能出现多余的空格
选择结构
-
关系运算符
当运算两边的类型不一致时,系统将自动转化
&&和 | | 逻辑表达式都有短路现象
-
else
else不是一条独立的语句,它只是if语句的一部分
else与最近的if 配对,所以if 最好都带上{ },保证配对不错
循环结构
-
while
先执行条件判断,即使循环结束,条件处的表达式也要执行完。如a++
a++在条件里,判断a,条件语句结束后再加1
数组
-
初始化
当所赋初值个数少于所定义数组的元素个数时,将自动给后面的其它元素补初值0
-
访问
a++即使加了括号,也是访问a位置,语句结束了再加1
-
数组名
数组名一般存放的是首地址,一般返回元素类型指针
当运算符为sizeof或者&时,返回数组类型指针
-
字符数组
初值个数小于数组长度,剩余的元素定为空字符
'\0'
不能对字符数组名直接赋值,要用
strcpy()
数组注意空间大小,多留一个
'\0'
的空间 -
字符串数组
数组中每个元素都是一个存放字符串的一维数组
二维数组的意思
函数
-
返回
在函数中允许有多个return语句,但每次调用只能有一个return语句被执行
返回类型以函数值的类型为准,进行自动转换
当函数没有指明返回值,或没有返回语句时,函数返回一个不确定的值
-
参数
形参是局部变量,开辟出来放入栈中
形参变量存放实参的值或地址,在函数可改变存放其它的
-
函数说明
说明有两种方式:外部说明、内部说明
在函数内部所作的声明称为内部说明,也成为局部说明
在函数外的声明叫外部声明,在程序最前端,又称为全局说明
-
函数名
函数名代表该函数的入口地址
-
变量
外部变量和局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”
变量名在不同函数有相同,自己作用范围的变量优先
没有指定存储类别,或使用auto说明符,默认自动类别
register也是自动类变量,变量的值保留在CPU的寄存器
局部变量不初始化,默认随机值
静态局部变量在内存的静态存储区,只被初始化一次,直到程序结束,默认为0
静态全局变量不会跨文件
全局变量可以跨文件,其它文件要用extern 才可以使用该全局变量
指针
-
多维数组
多维数组的元素是数组,多维数组当成一维数组来处理
-
结构体指针
结构体名也是存放首地址
如果第一个元素为指针且动态分配的,则被赋值的变量第一个元素也指向该堆。其它元素仍在堆(函数内定义的)
-
字符指针
存放字符串的首地址
既可以初始化也可以赋值(改变存储内容)
数组名可以初始化,而不可以赋值,它是一个固定的值
-
函数指针
数据类型 (*指针变量名)();
只需将(*s)代替函数名即可
函数指针的运算没有意义,如++s、–s
宏定义
-
不带参数
#define 宏名 替换文本
可以用
#undef
命令终止宏定义的作用域
结构体
-
typedef
typedef 类型名 新名字
原有的类型名依然有效
-
结构体
定义结构体时编译程序不会分配内存空间
ANSI C标准规定结构体至多允许嵌套15层
直接定义结构体
struct { 成员表列 } 变量名表列
即不出现结构体名
文件
-
概念
文件分为ASCII文件和二进制文件
文件指针 FILE *fp
-
fopen
fopen(文件名,文件使用方式)
返回一个FILE类型的指针
-
fread、fwrite
fread(buffer, size, count, fp);
fwrite(buffer, size, count, fp);
buffer代表的是一个指针变量
-
fscanf、fprintf
fscanf(文件指针,格式字符串,输入列表)
fprintf(文件指针,格式字符串,输入列表)
读写对象是磁盘文件上的数据
-
rewind
rewind(fp);
使文件的位置指针重新返回到文件的开头
-
fseek
fseek(fp, offset, method)
method = 0 从头开始 1 当前位置 2文件结尾