C语言深入探究

上传人:豆浆 文档编号:48598806 上传时间:2018-07-17 格式:PPT 页数:35 大小:1.56MB
返回 下载 相关 举报
C语言深入探究_第1页
第1页 / 共35页
C语言深入探究_第2页
第2页 / 共35页
C语言深入探究_第3页
第3页 / 共35页
C语言深入探究_第4页
第4页 / 共35页
C语言深入探究_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《C语言深入探究》由会员分享,可在线阅读,更多相关《C语言深入探究(35页珍藏版)》请在金锄头文库上搜索。

1、LOGO1C语言深入探究Song CHAI (Song CHAI (柴松柴松) )College of Electrical and Information College of Electrical and Information EngineeringEngineering,SWUNSWUNEmailEmail:QQQQ:2934133829341338LOGO2从一个数开始从一个数开始void main() int a; printf(“%d”,a); “ “进行未初始化赋值的变量,它的值是不确定的。进行未初始化赋值的变量,它的值是不确定的。” ”某些编译器,比如说某些编译器,比如说VC

2、+6.0VC+6.0(及更高版本),会对已定义但未初(及更高版本),会对已定义但未初 始化的变量赋初值始化的变量赋初值0xCCCC CCCC0xCCCC CCCC。-858993460-858993460输出结果是多少?输出结果是多少?LOGO3从一个数开始从一个数开始问:运算式问:运算式a + b a + b 的结果是什么类型?的结果是什么类型?VC+6.0VC+6.0下是下是floatfloat,而在,而在Turbo CTurbo C下是下是doubledouble!float a;float a; int b;int b;同一段代码,在不同编译器下,会有不同的解释!同一段代码,在不同编译

3、器下,会有不同的解释!LOGO4从一个数开始从一个数开始lengthlength的值是多少?的值是多少?8 8位处理器(如位处理器(如C51C51)下是)下是1 1; 1616位处理器下是位处理器下是2 2; 3232位处理器下是位处理器下是4 4!int length; length = sizeof(int);同一段代码,在不同处理器下,会有不同的结果!同一段代码,在不同处理器下,会有不同的结果!LOGO5从一个数开始从一个数开始C C代码代码C C语言预处理语言预处理编译器编译器原码分析原码分析目标代码目标代码 综合综合符号表符号表链接器链接器可执行文件可执行文件编译过程:VC+6.0G

4、CCKeilLOGO6一、关键字一、关键字C C语言中一共有语言中一共有3232个关键字:个关键字:变量类型:int, float, char, long, short, double, void;变量修饰:auto, register, static, extern, const, signed, unsigned, volatile;自定义类型:enum, union, struct, typedef;循环/跳转:do, while, for, goto, break, continue;分支控制:switch, case, default, if, else;函数返回:return;所占

5、字节数:sizeof.LOGO7一、关键字一、关键字1. auto1. auto/如何使用auto关键键字auto int a;/等价于“int a;” 我们平时在函数中 定义的变量都是auto变量。auto变量的意思就是让处理器自己处理该变量。需要注意 auto int a 不能作为全局变量。LOGO8一、关键字一、关键字2. 2. registerregister/如何使用register关键键字register int a; /告诉编译诉编译 器“请请尽可能将该变该变 量放到CPU的register /里面去”,以提高该变该变 量的访问访问 速度。But(However,Even so,

6、Even though,Despite that,Yet),我们的编译器一般都很有自己的想法,即使你这样告诉它,它也不 一定按你想的这样来做()考虑下面这段2代码错在哪里:register int a;printf(“%d”,register double a;LOGO9一、关键字一、关键字3. static3. static static的三个作用:A、用于修饰全局变量:限制该变量的作用范围为本文件。(隐藏 )B、用于修饰函数:限制该函数的作用范围为本文件。(隐藏)C、用于修饰局部变量:该变量为静态变量。(初始化一次,变量 一直存在)LOGO10一、关键字一、关键字3. static3. s

7、tatic A. 修饰饰全局变变量 -(限制全局变变量的作用范围为围为 本文件 ) /file1.cpp int a = 10; static int b = 1;fun() /file2-1.cppextern int a; void main()a-; /file2-2.cppextern int b;void main()b+; 可以调用可以调用 file1.cppfile1.cpp中的中的 全局变量全局变量a a;不能调用不能调用 file1.cppfile1.cpp中的全中的全 局变量局变量b b,其作,其作 用域只在用域只在 file1.cppfile1.cpp ( (被被stat

8、icstatic隐藏隐藏) )LOGO11一、关键字一、关键字3. static3. static A. 修饰饰全局变变量-续续(复习习:全局变变量的作用范围围) /file1.cppvoid funtion1()extern int a;a+ static int a=1;void function2()a +; 全局变量作用范全局变量作用范 围从定义开始,围从定义开始, 到本文件结束到本文件结束在定义全局变量在定义全局变量a a之前之前 的部分如果要用到的部分如果要用到a a, 需用需用extern int aextern int a声明。声明。关于全局变变量:1.全局变变量作用范围围从定

9、义变义变 量开始到该该文件结结束;2.其它位置要引用全局变变量( 比如本文件定义义之前,比如其 它文件中),需加extern;3.如不想其它文件引用该该全局 变变量,加static;4.局部变变量可以和全局变变量重 名,局部会屏蔽全局;LOGO12一、关键字一、关键字3. static3. static B. 修饰饰函数 -(限制函数的作用范围为围为 本文件)/file1.cppvoid fun1() static void fun2() /file2-1.cppextern fun1(); void main()fun1(); /file2-2.cppextern fun2()void ma

10、in()fun2(); 可以调用可以调用 file1.cppfile1.cpp中的中的 fun1fun1函数函数不能调用不能调用 fun2fun2函数,函数, 其作用域只其作用域只 在在file1.cppfile1.cpp ( (被被staticstatic隐隐 藏藏) )LOGO13一、关键字一、关键字3. static3. static C.用于修饰饰局部变变量 -(该变该变 量为为静态变态变 量)int count = 1;int fun(void)static int count = 10; return count-; void main(void) printf(“global -

11、 local staticn“);for(; count = 10; +count)printf(“%d - %dn“, count, fun(); 定义全局变量定义全局变量定义静态局部变量:定义静态局部变量:1. 1.屏蔽同名全局变量;屏蔽同名全局变量;2. 2.初始化只执行一次;初始化只执行一次;3. 3.当前函数执行完成后,用当前函数执行完成后,用 于保存变量的空间不释放。于保存变量的空间不释放。1 - 10 2 - 9 3 - 8 4 - 7 5 - 6 6 - 5 7 - 4 8 - 3 9 - 2 10 - 1LOGO14一、关键字一、关键字4. sizeof4. sizeof/如

12、何使用sizeof关键键字int i = 0;sizeof(int);/返回int型所占的字节节数;sizeof(i);/返回变变量i的类类型,即int,所占的字节节数;sizeof i;/同上注意:sizeof不是函数!是类似于return的一个关键字!LOGO15一、关键字一、关键字4. sizeof 4. sizeof 续续/如何使用sizeof关键键字int a10; printf(“%dn“,sizeof(a); printf(“%dn“,sizeof(a0); printf(“%dn“,sizeof( printf(“%dn“,sizeof(思考2:如何使用sizeof关键字判断当

13、前处理器的位数(8/16/32)?数组数组a a所占字节数,所占字节数,4040元素元素a0a0所占字节数,所占字节数,4 4元素元素a0a0的地址所占字节数,的地址所占字节数,4 4数组数组a a的首地址地址所占字节数,的首地址地址所占字节数,4 4思考1:sizeof(struct student)是多少: struct student int id; char name10; float math; float english; 8*sizeof(int);8*sizeof(int*);8*sizeof(void*);LOGO16一、关键字一、关键字5. void5. void void

14、的两个作用:A、用于修饰函数的返回值和参数:没有返回值 or/and 没有参数。B、用于修饰指针变量:定义空指针。void - A、修饰函数的返回值和参数:没有返回值 or/and 没有参数 。void function(void) LOGO17一、关键字一、关键字5. void B5. void B、用于修饰饰指针变针变 量:定义义空指针针float *p1;int *p2;/p1 = p2;p1 = (float *)p2;void *p1;int *p2;p1 = p2;void *p1;int *p2;/p2 = p1;p2 = (int *)p1;LOGO18一、关键字一、关键字5.

15、 void B5. void B、用于修饰饰指针变针变 量:定义义空指针针 续续/void*空指针针的用途定义动态长义动态长 度的数组组(错误错误 方法) int length;/数组长组长 度 length = getLength(); int alength;/void*空指针针的用途定义动态长义动态长 度的数组组(正确方法,malloc) int length;/数组长组长 度 length = getLength(); void *p = malloc(sizeof(int)*length); int *a = (int *)p; *(a + 0) = ; free(p);LOGO19一、关键字一、关键字6. const6. const/如何使用const关键键字const = read only!const int i = 0; int const j = 0; int const a5 = 1,2,3,4,5;void function(const int b)b+;/error!注意:const 修饰的变量与#define宏的区别。LOGO20一、关键字一、关键字6. const 6. const 续:与续:与#define#define的区别的区别#define PI 3.141

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号