分享

c语言程序设计(谭浩强)

 三苦书屋 2017-03-08

.

结构体、共用体、枚举型。

3指针类型:用于存储地址的一类数据类型。

4空类型:

编译器根据变量的数据类型,给变量分配存储单元

3.3 常量与变量48

1、符号常量——符号常量在其作用域内不能改变,也不能被赋值。 2、变量——变量由变量名变量值标识。

, 变量名实际上是一个符号地址,编译连接程序时给每个变量名分配一个内存

地址,当程序访问变量值时,实际上是通过变量名找到相应的内存地址,从

其存储单元中读取数据。

3.4 基本类型

1整形数据在内存中的存放,是以补码形式存放的。

2实型数据:单精度 双精度。

, 在内存中以指数形势存放。

, 若数据超过有效位,则超过C语言规定有效位的数据将被舍去,故产生误差。 3字符型数据:用一个字节存储单元存储。即将字符的ASCII存储到内存单元中。

, 用单引号括起来的一个字符。

, 转义字符——特殊字符常量或者控制字符常量,它们都以“\”开头。 , Charunsigned char区别:char7位数表示,最大表示编码为127的字符;

unsigned char8位数表示,最大表示编码为255的字符。 , 字符数据与整型数据可以相互赋值

, 字符数据可以以字符数据输出,也可以以整型数据形式输出。 4字符串常量:C语言中,必须是用字符数组来保存字符串常量。在内存中顺序存储

, 用一对双引号括起来的字符序列。

, 每个字符串常量结尾以一个字符\0作为结束标记。(一般由系统自动加上)。

...

6/27页

.

3.5 变量63

1自动变量——在函数体内或复合语句中定义的非静态变量称为自动变量

, C语言编译时,不对自动变量赋初值。

, 当程序执行到自动变量的作用域时,程序才为自动变量分配空间。当定义自

动变量的函数或复合语句执行结束后,程序释放自动变量的存储空间。

, 自动变量保存在程序的动态存储空间

2静态局部变量——在函数体内或复合语句中用static定义的变量称为静态局部变量

, C语言编译时,对静态局部变量赋初值。

, 静态局部变量存储在程序的静态存储空间

, 静态局部变量在程序的整个运行期间均占用程序的静态存储空间,直到程序

退出后才释放存储空间。

3寄存器变量——用register声明的变量。

4外部变量(全局变量)——在函数的外部定义的变量。它的作用域是从定义处开始,到本程序文件的末尾结束,在此作用域内,全局变量可以为程序的各个函数引用。

, C语言编译时,对全局变量赋初值。

, 全局变量存储在程序的静态存储空间

, 全局变量在程序的整个运行期间均占用程序的静态存储空间,直到程序退出

后才释放存储空间。

注意:

(1)当引用本源文件后面定义的全局变量或引用在其他源文件中定义的全局变量是,应在引用位置前,利用extern 声明该全局变量,以告诉编译器编译时,引用的是一个外部变量,在编译器连接时,将引用的外部变量的作用域扩展到本文件extern 声明处。

(2)用static 声明的全局变量,不能被其他文件引用。

注意:

(1)变量声明分为定义性声明引用性声明

(2)一般把建立存储空间的声明称为变量定义,把不需要建立存储空间的声明成为变量声明。

...

7/27页

.

3.6 不同类型数据间的混合运算

, 不同类型数据进行混合运算时,不同类型的数据要先转换成同一类型,按照

类型级别由低到高(charshortint——unsignedlongdouble;float

double)的顺序进行转换。

, 强制类型转换——(类型名) 表达式强制类型转换也就是将存储数据的

内存单元强制转换为另一种数据类型的单元大小。即强制将存放数据的内存

单元改变。

, 赋值时进行类型转换:将数据复制给变量时,将会将数据强制转换为要赋值

变量的类型。一般短类型转换为长类型时,进行符号扩展;长类型转换为短

类型时,仅赋值低位,难以保证数据的正确性。

3.7 函数的调用过程(补充)

, C函数其实就是一个程序模块。

, C函数在编译时,单独编译成一个指令模块,在函数模块开始处定义保护现

场指令,将用到的CPU寄存器压入堆栈。在返回时定义了恢复现场指令,将

堆栈数据恢复到CPU寄存器。

, 在调用函数时,一般利用堆栈传递输入参数;利用EAX传递输出参数,注

意在函数调用完成后,要维持堆栈平衡,且函数返回输出参数在EAX中,

在使用输出参数前,不要改变EAX的值。

第四章 最简单的C程序设计——顺序程序设计77 4.1 字符数据的输入输出

1C语言没有输入输出语句,IO操作通过调用系统函数实现

2、在程序的开头,要有:#include stdio.h”或 #include ,预定义语句,用来引用头文件,在编译时将头文件中的函数原型声明添加到源文件中。

默认输出设备——显示屏,默认输入设备——键盘。

...

8/27页

.

第五章 选择结构的程序设计97

第六章 循环结构程序设计

6.1 语句标号

语句标号——用于定义程序中的某个位置,用标识符表示,不能只用数字。 6.2 break语句和continue语句

1break语句结束循环语句和switch语句。

2continue 结束本次循环,即忽略循环体中剩余的语句。

第七章 数组132

7.1 构造类型

构造类型——是由基本类型按照一定规则构造而成的。(如数组、结构体、共同体、枚举型)

构造类型的每个分量(元素),是一个变量,它可以是一个简单类型或者构造类型。

构造类型的分量占用相邻的存储空间

7.2 数组133

1、数组——是有序数据的集合,数据元素类型相同,顺序存储,占用相邻的存储空间。

2、数组——数组必须先定义后引用。静态数组变量定义时编译器自动初始化数据元素为0,动态数组变量在程序执行时分配存储空间,在未被赋值初始化之前其值随机。

3C语言只能逐个引用数组元素,不能一次引用整个数组。

4、数组引用是“数组名+下标”引用,数组下标均为整数。如a[2]

7.3 二维数组

1、数组元素为数组。

...

9/27页

.

2、在内存中,C语言的二维数组中数组元素的存放顺序是按行存放的。 3、二维数组引用是“数组名+下标+下标”。如a[1][2]

7.4 字符串——字符数组

1、一般用\0来标识字符串结尾。\0占用一个字符变量空间。 2、用字符串赋值字符数组时,C编译器在字符串后自动加\0赋给字符数字。 3、字符数组可以一次引用整个字符串数组。如整个字符串(数组)的输入输出,

%s格式,且在输入字符数组时,用数组名代表数组的首地址,对于二维数组,仅仅

写行下标不写列下标,也可以代表给行数组的首地址。

在用%s输入输出字符串数组时,遇到\0结束。

7.5 字符串处理函数 #include 1gets(字符数组名)

从键盘输入一个字符串(以回车结束),并返回字符数组的起始地址 get(str)。

2puts(字符数组名/字符串)

将数组中的字符串(\0结尾的字符序列)输出到终端上,输完换行 puts(str),puts(“ok”)。

3strcpy(目的字符数组1名,源字符串/字符数组2名) 拷贝时,将“\0”一起拷贝过去。

4strcat(字符数组1名,字符串/字符数组2名)

将字符串/字符数组2连接到字符数组1中。

连接时,编译器去掉字符数组1的“\0”。

5strcmp(字符串/字符数组1名,字符串/字符数组2名) 比较字符串/字符数组1 和字符串/字符数组2名的大小。 字符串/字符数组1>字符串/字符数组2,返回正数

字符串/字符数组1=字符串/字符数组2,返回0

字符串/字符数组1<字符串/字符数组2,返回负数。

...

10/27页

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多