C语言基础回顾
第一章 C语言基础
1. C语言编译过程
预处理:宏替换、条件编译、头文件包含、特殊符号
编译、优化:翻译并优化成等价的中间代码表示或汇编代码
汇编:生成目标文件,及与源程序等效的目标的机器语言代码,至少由代码段和数据段组成
链接:将有关的目标文件彼此相连接,分为静态链接和动态链接
2. 编码规范
适当的注释;
“{”和“}”独占一行并使一对对齐,“{}”之内的代码向右缩进4个空格;if、for、while等关键字后留一个空格再跟“(”,但函数紧跟;
“(”后向紧跟;“)”、“,”、“;”前向紧跟;
“,”后留空格;“;”不是一行结束时留空格;
二元操作符两边适当加空格,但单目运算符及“[ ]”、“.”、“->”要紧跟;
当一行代码太长时适当换行
3. 关键字
数据类型:int、char、float、double、short、long、void、signed、unsigned、enum(枚举类型)、struct(结构体)、union(联合体)、const(只读变量)、typedef(类型定义)、volatile(多为嵌入式开发用,说明这个变量可被隐含的改变,这样优化器在每次用这个变量时都会重新读取这个变量而不会使用寄存器里的值)
存储类别:auto(自动)、static(静态、内部)、register(寄存器)、extern(外部)
语句命令字:break(跳出switch和本层循环)、case、continue(跳出本次循环转入下一次循环的条件判断)、default、do、else、for、goto、if、renturn、switch、while
运算符:sizeof
4. 标识符
以字母或“_”开头,可以由字母、数字、“_”组成
5. 常量
常量后可以加“u”、“U”、“L”、“l”修饰;八进制数以“0”开头;十六进制以“0x”、“0X”开头;符号常量用单引号,字符串常量用双引号,并注意字符串常量所占空间为字符串长度加一字节
6. 数据类型
TC/Byte VC/Byte
[signed] int 2 4
unsigned [int] 2 4
[signed] short [int] 2 2
unsigned short [int] 2 2
[signed] long [int] 4 4
unsigned long [int] 4 4
float 4 4
double 8 8
char 1 1
signed char 1 1
unsigned char 1 1
typedef:typedef 类型名 新名 ,typedef在编译时执行而宏在预处理时执行
typedef声明数组类型:如typedef int arr[10],这样“arr a;”和“int a[10];”等效
枚举类型:
enum 枚举名
{
标识符[=符号常量],
……
标识符[=符号常量],
}[变量名];
共用体:
union 共用提名
{
数据类型 标识符;
……
数据类型 标识符;
}[变量名];
7. 变量的存储类型
局部变量:在函数中(包括main函数)或在复合语句中定义的变量,只在这个函数或复合语句中才起作用,形参属此类,也称内部变量
全局变量:在函数外定义的变量,在定义时候到本源文件结束起作用,若全局变量和局部变量重名(同一函数中变量不可同名,但不同函数可以),则局部变量起作用,同名全局变量暂不起作用
静态存储变量:存储在静态存储区,在编译时分配空间和赋初值,没有初值赋0,包括全局变量和局部静态变量(和自动变量对应,用static)
动态存储变量:存储在动态存储区,函数调用时分配空间和赋初值,没有初值则为随机数,包括形参和自动变量(定是局部变量,用auto)
第二章 运算符与表达式
1. 运算符的优先级
1:( ) [ ] -> .
2:! ~ ++ -- - + * & (类型符) sizeof (所有单目运算符)
3:* / %
4:+ -
5:<< >>
6:< <= > >=
7:== !=
8:&
9:^
10:|
11:&&
12:||
13:? :
14:= += -= *= /= %= >>= <<= &= |= ^= (所有赋值运算符)
15:,
其中只有赋值运算符、条件运算符(三目)、单目运算符是右结合
2. 表达式的值
赋值表达式:给变量赋的值
条件运算符:根据“?”前表达式选择“:”两边的一个表达式的值
逗号表达式:逗号分隔的最后一个表达式的值
第三章 函数
1. 内部、外部函数
用static可以声明(定义)内部函数,此种函数只能被同一源文件的函数调用,此时就不用担心与其他文件函数同名;用extern可以声明(定义)外部函数,其中extern可省
2. main函数的参数
main(int argc, char *argv[]),调用main时在命令行中输入“filename str1 str2……”,则argc为包括filename在内的参数个数,argv指向str1、str2 ……
第四章 指针
1. 指向字符串的指针
char *p=”Hello world.”; 中p指向字符串常量,并非把字符串赋给p指向的内存
2. 几种定义
int *p; 指向整型的指针
int (*p)[n]; 指向n长度一维数组的指针
int *p[n]; n长度指向整型的指针数组
int (*p)(); 指向函数的指针
int *p(); 整型指针型函数,函数返回值是整型指针
int **p; 二级指针,指向指向整型指针的指针,和指向一维数组的指针不同
3. “.”和“->”的区别
“.”是结构体或联合体用来调出成员的,与结构体变量或联合体变量一起用,而“->”和指向结构体变量或联合体变量的指针一起用,他们不能互换(加“*”时才可以)
4. const和指针
(const int *)和(int *)并非同一种类型,后者可自动类型转化到前者,前者不可自动类型转化到后者。注意(const int *)和(int * const)的区别,前者是指向常量的指针,后者为指向变量的常量指针。(const int *)变量不可通过解引用改变所指内容,但可以改变该变量的值。(int * const)变量不可改变,但可以改变所指内容。通常将函数参数声明成const型或指向cosnt指针,避免改变参数的值或它所指的值。
第五章 预处理
1. 预处理的功能
宏定义、文件包含、条件编译,都带有“#”
2. 实例
#define,宏定义,带参数时注意加“()”,和#undef配合
#include,文件包含,接“<>”时表示只在标准库中查找,接“”””时,先在当前目录找找不到再到标准库
#if ……
……
#elif
……
#else
……
#edif
#ifdef:当被宏定义时
#ifndef:当未被宏定义时
#line:#line 行号 [“文件名”]
#pragma:参数为下面三种
message,在编译信息输出窗口中输出相应信息
code,设置程序中函数代码存放的代码段
once,保证头文件被编译一次
3. 特殊宏定义
__LINE__、__FILE__、__DATE__、__TIME__、__STDC__、__cplusplus 等
第六章 常用算法
1. 排序
2. 查找
3. 数据压缩
参考文献
C 语言开发实战宝典/ 刘彬彬,李伟明等编著. —北京:清华大学出版社,2011.1
C 语言程序设计教程/ 李玲,桂玮珍,刘莲英编著. —北京:人民邮电出版社,2005.2
C函数速查手册/ 尹德淳编著. —北京:人民邮电出版社,2009.4
C 语言高级程序设计/ 陈天洲编著. —北京:人民邮电出版社,2002.12
C语言算法速查手册/ 程晓旭等编著. —北京:人民邮电出版社,2009.10
C语言编程之道/ 刘彬彬,孙秀梅,李鑫编著. —北京:人民邮电出版社,2011.3
C语言基础回顾的更多相关文章
- JavaScript 基础回顾——对象
JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...
- JavaScript基础回顾一(类型、值和变量)
请看代码并思考输出结果 var scope = 'global'; function f(){ console.log(scope); var scope = 'local'; console.log ...
- python高级(1)—— 基础回顾1
Python基础回顾 认识变量 在学习了之前的Python零基础入门系列[洗礼灵魂,修炼Python](说明一下,这个系列现在回过来再来看这个名字确实好土啊,然后有些知识点感觉还不太精准,后期看如果有 ...
- 单片机教程4.C语言基础以及流水灯的实现
单片机教程4.C语言基础以及流水灯的实现 C语言,没接触过计算机编程语言的人会把它看的很神秘,感觉非常的难,而在我看来,C语言的逻辑和运算,就是小学水平,所以大家不要怕它,我尽可能的从小学数学逻辑方式 ...
- goweb-go语言基础
go语言基础 虽然这本书是讲goweb,但还是吧go语言基础过了一遍,由于我之前已经对go语言基础做了一遍系统的学习,这里就当简单回顾一下,不再写过多笔记了,之前的写的博客都有基础知识,O(∩_∩)O ...
- Java基础回顾_第一部分
Java基础回顾 基本数据类型 数值类型 什么是字节? 位(bit):是计算机中数据的最小单位 字节(byte):是计算机中数据处理的基本单位,习惯上用大写字母B来表示 1 B = 8 bit 字符: ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...
随机推荐
- socketserver 分块记录
网络编程 Socket(TCP,IP)套接字 服务端 运行起来, 客户端 客户端 客户端 客户端 服务端: import socket sk = socket.socket() #绑定端口号 sk.b ...
- mysql创建用户及授权相关命令
移步: https://zhidao.baidu.com/question/1576368583039067980.html
- [转载]再来重新认识JavaEE完整体系架构
移步: http://www.jizhuomi.com/software/644.html
- 【 2013 Multi-University Training Contest 6 】
HDU 4655 Cut Pieces 假设n个数构成的总数都分成了n段,总数是n*a1*a2*...*an.但是答案显然不会那么多. 对于相邻的两个ai,ai+1,如果选择相同的颜色,那么就减少了a ...
- 自制c#简易计算器
这是一个课堂作业,我觉得作为一个简易的计算器不需要态度复杂的东西,可能还有一些bug,有空再慢慢加强. using System;using System.Collections.Generic;us ...
- SQLserver 备份和还原 失败
错误一: 备份对于服务器“xxxxxx”失败. System.Data.SqlClient.SqlError: 无法使用备份文件 'C:\Program Files\Microsoft SQL Ser ...
- mysql语句中日期函数和日期的加减运算
一.秒数和时钟格式的互相转化 SEC_TO_TIME(seconds) 返回seconds参数,变换成小时.分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字. ...
- JSP内置对象---request对象(用户登录页面(返回值和数组:gerParameter,getParameterValues))
创建两个jsp页面:reg.jsp 和 request.jsp reg.jsp: <%@ page language="java" import="java.uti ...
- js动画之获取元素属性
首先我们要介绍一些知识 offsetWidth element.offsetWidth = width + padding + border; width 我们也知道element.style.wid ...
- 浅谈Extjs radiogroup change事件与items下的checked属性
在使用Extjs制作crud时,由于添加和修改界面的高度相似,使用了相同的row字段. 在角色字段中使用了change监听事件,用于动态的无效化权限分配字段,因为权限分配界面默认没有隐藏,设定了che ...