一.C语言基础部分掌握的是:基本知识和基本概念。告诉我们有些什么,能干什么。却没告诉何时使用,为何这样用,如何组合他们。
C初级告诉如何通过编译,C中级告诉如何避开虽然通过编译但仍然存在的错误。
语言紧紧是语法层面上的东西,打造的是整体的零件部分。语义关心的是系统整体,正是程序员所做的,即如何有效组合语法产生语义。
1.C语言语法要素1:
字符集
关键字
运算符
标识符
表达式
语句
2.C语言语法要素2:
程序结构
数据结构
数组
结构体
共用体
枚举
程序执行形态---函数
程序存储形态---文件
3.C语言语法要素3:
常量
变量
类型
二.C语言开发流程
步骤 成果
编辑 .CPP .H
预编译
编译 .obj---------------->分界线 静态编译+动态编译
链接 .exe
加载 ----------->真正理解???
运行
程序语言使用代价度量:
程序创建、测试、使用的代价:程序设计、编码、调试、修改、集成、测试 最关心
翻译的代价:翻译的速度和所占系统资源。
程序执行的代价:运行时所占系统资源的代价。时间+空间的消耗。 不是主要关心的问题。
程序维护的代价:修复、升级。最关系的问题。
三.扩展类型
结构体:类型的嵌套。体现了C语言的“成长性”。
注意:不可以在定义结构体时让成员带有初值。
1.结构体中成员是数组和指针的区别: // EX:
#define LEN 20
struct name{struct pname{
char first[LEN]; char *first;
char last[LEN]; char *last;
} }
name veep = {“Talia” , “Summers”}; //对于veep来说,字符串是存在结构体内部,占用40个字节。
pname treas = { “Brad”, “Fallingjaw” }; //但对于treas 则存于字符串常量区,结构中只是存放着两个地址,8个字节。这只适用于别处已为字符串分配了数组时,否则会出问题。
2.结构体的可升缩型数组成员
struct flex {
double scores[] ;//在使用时不要声明flex类型的变量,因为其中的scores没得到空间。只能声明flex类型的指针,由它指向堆空间。
}
结构体所占空间与成员变量的顺序有关,是根据C/C++的pack算法对齐基数来决定结构体的大小。
原因:为了加快CPU存取速度,C++编译器在处理数据时,把结构体成员大小按照4或8的倍数计算,即数据对齐,,并不是程序的错误,而是提高效率的方式的折中。
3.共用体
4.枚举
枚举元素是int型常量,枚举元素有默认值,是离散的;声明时可以对枚举元素选用初始化。
5.内连接和外连接
作用域:{}
内部连接意味着可以在其他编译单元中命名相同的标识符而不会发生名冲突。——尽管同名,但不是同一个。
extern则恰相反,它表示所命名的标识符对所有的编译单元都是可见的,是同一个。它的作用是:
1. 编译时放松检查;
2. 链接时到别处去找——全局的。