用书:c primer plus
先恢复框架骨干,再填充血肉
学习时间:21-28
重点知识:
1.编译-链接-运行
编译:编译器将源码转换为可执行代码
链接:编译器从c库中获取标准例程放入源码中一同编译
运行:运行可执行文件
2.关键字
数据类型:
int:有符号整数,-32768到32767
short int: 小数值有符号整数
long int 以及 long long int:大数值有符号整数
unsigned int:无符号整数 0到65535
char:字符类型,存储整数以表示字符,unicode是一个能够表示全世界多种字符集的系统。
_Bool:布尔值,0或1,实际也是整数类型
float:浮点数,能够表示更大的数,至少表示6位有效数字
double:双精度浮点数,至少表示10位有效数字
long double:至少同double精度同一水准
float _Complex,double _Complex,long double _Complex:表示复数
3.常量/变量声明
常量:
c预处理器定义常量
#define Name value
const修饰符
const int MONTHS=12
4.输入输出格式化
printf、scanf。
5.运算符
常用运算符
sizeof:返回操作数大小
%:取余数
++、--:增量与减量
6.循环语句
while(expression)
{
statement
}
for (初始;条件;更新)
{
statement
}
do
{
statement
}while(expression)
do while能够先执行一次循环内容,再进行判断
7数组
int array[numbers] = {31,288,31,30,31,30,31,31}//数组初始化
array[1]=33//赋值
//C不支持把数组作为一个整体来赋值,也不支持用花括号(初始化除外)赋值
float rain[5][12]//多维数组
8函数
void starbar(void)//函数原型声明函数种类
int main{
starbar();//函数调用,执行函数
}
void starbar(void)//定义函数
{
...
}
1.每个函数内部都可以调用其它函数。
2.形参,实参,返回参数
3.将函数原型与常量定义放在一个头文件中,就不必每次使用这些函数以及常量时输入其原型声明
9指针
指针式一个其数值为地址的变量
取地址运算符&,取值运算符*
int *pi//指针声明,*表示变量pi是指针,int表示该指针指向的变量类型
1.使用指针作为函数参数能够建立函数间的通信。
2.数组-指针
flizny==&flizny[0]//数组名是该数组首元素的地址
dates+2==&date[2]//对一个指针加1的结果是对该指针增加1个存储单元(根据指针指向变量类型)
int sum(int *ar,int n);//数组参数
int sum(int ar[],int n);//数组参数
int sum(const int ar[],int n);//保护数组不被改变
3.指针与多维数组与变长数组
void somefunction(int (*pt) [4]);
void somefunction(int pt[][4]);
数组的行可以在函数调用时传递,但是数组的列只能被预置在函数内部
变长数组的变体现在行列用变量定义
10内存管理
作用域:代码块作用域、函数原型作用域、文件作用域
链接:外部链接、内部链接、空链接
五种存储类型
存储类说明符
auto、register、static、extern、typedef
分配内存的malloc()以及free()
double *ptd;
ptd=(double *)malloc(30*sizeof(double));//(double *)指示返回的指针,malloc()里放字节数
free(ptd);//释放内存块,在复杂程序中是有必要的
11结构体
struct book{
char title[MAXTITL];
char author[MAXAUTL];
float value;
};//结构声明
struct book library;//结构变量声明
struct book library ={
"The Pirate and the Devious Damsel",
"Renee Vivotte",
1.95
};//结构变量初始化
gets(library.title);//使用.访问结构体成员
struct book surprise={.value=10.99};//指定初始化
struct book library[MAXBKS];//结构数组
struct guy *him;//结构指针声明
him->imcome=(*him).income;//后跟->运算符的结构指针和后跟.运算符的结构名是一样的
12枚举
enum kids {nippy,slats,skippy,nina,liz};//整数类型,nippy==0,slates==1
enum kid AA;//枚举变量声明
13位操作
~(10011010);//按位取反
(10010011)|(00111101);//位或
(10010011)^(00111101);//位异或等等