序言
C语言的6个知识板块:数据,操作符,语句,函数,动态内存分配,程序环境
数据
结构体指针初始化
- 不需要每个元素逐个赋值
- C语言stdio.h头文件中定义了NULL
- #define NULL ((void*)0)
- NULL是一个类型为void*,值为0的对象。
- void*类型可以隐式转换为任意指针类型
- 可以将NULL**直接赋值**给结构体指针
- 如:typedef dataqueuelist* portList;
- portList plplist;
- *plplist = NULL;初始化
字符串常量更改
- 如果定义成char *str = “abcd”;这样的话是不可以对字符串常量进行修改的,字符串常量存储在常量区,不允许修改(当然也可以非法修改)
- 常量存储区是一块比较特殊的存储区,里面存放常量不允许修改;全局/静态存储区存放全局变量和静态变量
- 如果要修改字符串内容,可做如下定义char str[] = “abcd”;修改为数组形式,可直接对元素进行修改
变量类型
- u_char,u_int,u_short,u_int8_t等变量类型
- 系统数据类型,与平台无关
- 如:int在32位操作系统/编译系统下是2字节,在64位下是4字节,而u_int8_t在任何平台下都是8位无符号整型数
操作符
关键字
- 关键字,C语言标准定义的32个关键字
- auto 声明自动变量,缺省时编译器一般默认为auto
- int 声明整型变量
- double 声明双精度变量
- long 声明长整型变量
- char 声明字符型变量
- float 声明浮点型变量
- short 声明短整型变量
- signed 声明有符号类型变量
- unsigned 声明无符号类型变量
- struct 声明结构体变量
- union 声明联合数据类型
- enum 声明枚举类型
- static 声明静态变量
- switch 用于开关语句
- case 开关语句分支
- default 开关语句中的“其他”分支
- break 跳出当前循环
- register 声明寄存器变量
- const 声明只读变量
- volatile 说明变量在程序执行中可被隐含地改变
- typedef 用以给数据类型取别名(当然还有其他作用)
- extern 声明变量是在其他文件正声明(也可以看做是引用变量)
- return 子程序返回语句(可以带参数,也可不带参数)
- void 声明函数无返回值或无参数,声明空类型指针
- continue 结束当前循环,开始下一轮循环
- do 循环语句的循环体
- while 循环语句的循环条件
- if 条件语句
- else 条件语句否定分支(与if 连用)
- for 一种循环语句(可意会不可言传)
- goto 无条件跳转语句
- sizeof 计算对象所占内存空间大小
- C89标准中有32个关键字,可以将其分成4部分,分别是数据类型关键字(12),控制语句关键字(12个),存储类型关键字(4个),类型限定符关键字(2个),其他(2个)。
- 数据类型关键字:
- 基本数据类型:void,short,int,long,signed,unsigned,float,double,enum
- 结构类型:struct,union
- 控制语句关键字:
- 选择语句关键字:if,else,switch,case,default
- 循环语句关键字:do,while,for
- 跳转语句关键字:return,continue,break,goto
- 存储类型关键字:auto,register,static,extern
- 类型限定符关键字:const,volatitle
- 其他:sizeof,typedef
- 数据类型关键字:
- 关键字,C语言标准定义的32个关键字
操作符
- 具有不同优先级的各种运算符
- 初等运算符
- 单目运算符
- 算术运算符
- 移位运算符
- 关系运算符
- 位操作运算符
- 逻辑运算符
- 条件运算符
- 赋值运算符
- 逗号运算符
- 具有不同优先级的各种运算符
语句
for循环如何每次加n(n>1)
- 一个for循环有4个部分:起始条件,终止条件,循环体,循环条件
- 在循环条件处更改:如每次加2 for (i=0;i<10;i=i+2) or for (i=0;i<10;i+=2)
退出语句
- exit(0); 退出函数
- break; 退出循环
- continue; 继续下一次循环
函数
getchar()函数
- 函数功能:从标准输入控制台读取字符
- 头文件:stdio.h
- 函数原型:int getchar(void);
- 函数返回值:
- 成功:返回第一个输入字符的ASCII码
- 失败:-1
- 如果用户在按回车键之前输入了不只一个字符,其他字符会保留在键盘缓冲区中,等待后续getchar()调用读取。即后续的getchat()调用不会等待用户按键,而是直接读取缓冲区中的字符,直到缓冲区的字符读取完毕后,才等待用户按键。
- 注:getchar()非真正函数,而是getc(stdin)的宏定义
printf()函数的输出格式
- 字符型:%c
- 字符串类型:%s
- 整型:%d
- 长整型:%ld
- 无符号整型:%u
- 单精度浮点型:%f,%.nf表示精确到小数点后n位
- 双精度浮点型:%lf
- 无符号十六进制数小写:%x,%nx表示输出n字符
- 无符号十六进制数大写:%X
- 指针类型:%p
abs()绝对值函数
- 头文件:stdlib.h
- 函数原型:int abs (int para);
- 返回值:返回参数para的绝对值结果
程序环境
- 控制台、终端和shell是什么关系
- 控制台-console:linux环境下“Ctrl+Alt+F1”进入Linux系统的控制台,“Ctrl+Alt+F7”退出控制台。
- Linux在控制台下提供了不止一个终端,通过“Ctrl+Alt+Fx”切换到第x个终端
- 终端-terminal:是一个应用程序,可以在里面输入命令和计算机交互。
- “Ctrl+Alt+Fx”进入的是字符终端环境,shell是人机交互终端环境。
- shell:各终端里运行的命令行程序并不是终端本身,更不是Linux本身。命令行程序实质上也是个外围程序,叫“shell”。
- shell包含了用户界面功能,负责接收使用者输入的东西,翻译后发送给Linux内核处理。如果有输出信息,它也会把输出信息显示出来
- 控制台-console:linux环境下“Ctrl+Alt+F1”进入Linux系统的控制台,“Ctrl+Alt+F7”退出控制台。
2017.06.19