网站大量收购独家精品文档,联系QQ:2885784924

C语言深度解剖.docx

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言深度解剖 第一章:关键字 1.1 定义声明 Int i;定义创建了对象并为这个对象分配了内存 Extern int i;声明没有分配内存。 1.2 auto 在缺省的时候,编译器默认所以的变量都是auto的。自动变量 1.3 register 声明寄存器变量 Register:这个关键字请求编译器尽可能地将变量存在CPU内部寄存器中,而不是通过内存寻址访问以提高效率。 (cpu:皇帝,寄存器:太监,内存:大臣,不考虑CPU的高速缓存区cache) 寄存器的存取速度比内存块得多。但在使用register修饰符也有些限制的:register变量必须是能被CPU寄存器所接受的类型。这就意味着register变量必须是一个单个的值,并且其长度应小于或等于整型的长度,而且register变量可能不存放在内存中,所以不能用取地址运算符“”来获取register变量的地址。 1.4 static关键字 2个作用:修饰变量、修饰函数。 第一个作用:修饰变量:局部变量和全局变量,存放于内存的静态区。静态全局变量:作用域仅限于变量被定义的文件中,其他文件即使使用extern声明也没法使用它;要想在定义之前使用,就必须在前面加extern ***(故static声明的全局变量最好在文件顶端定义)。静态局部变量:在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其它函数也用不了。由于被static修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值也不会被销毁,函数下次使用时任然能用到这个值。 例: #includestdio.h static int j; int k = 0; void fun1(void) { static int i; i++; } void fun2(void) { j++; } int main(void) { for(k = 0;k10;k++) { fun1(); fun2(); } return 0; } 解析:i、j看起来没有初始化,其实默认值为0.程序结束 后i=10,j=10. 第二个作用:修饰函数:成为静态函数,对函数的作用域仅限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数是否会与其他文件中的函数同名。 另static在C++里还有第三层含义。 1.4 sizeof关键字 例:32位系统下 #include stdio.h void fun(int b[100]) { int a = sizeof(b);//a=4 } int main(void) { int *p = NULL; int length = sizeof(p);//length=4 length = sizeof(*p);//length=4 int a[100]; length = sizeof(a);//length=400 length = sizeof(a[100]);//length=4 length = sizeof(a);//length=400 length = sizeof(a[0]);//length=4 fun(a); return 0; } 1.5 -0与+0和补码 signed char 为什么能表示的数据范围是-128~127 答: 一个char共8位可以表示256个数,最高位为符号位,除开最高位还有7位共128种编号,如果最高位为0, 可以表示0(0 0000000)~127(0 1111111)共128个正整数 ;如果最高位为1,则可表示-128(1000 000)、-1(1000 0001)到-127(1 111 1111)共128个负整数,其实-128从数字大小来说应该 为 -0 ,但在数字世界里一般只需一个 +0 ,即 0 即可,-0最后就规定用来表示-128这个数了。 二进制数如何求补码: 正数补码:全不变。 例:+1(0 000 0001)的补码(0 000 0001)。 负数的补码:除符号位外,各位取反加1 例:-1(1 000 0001)的补码=(1 111 1110+1=1111 1111)。 Strlen函数判断一个字符串的结束就是以其末尾的\0为界限,不包括\0这个字符的。头文件string.h 1.6 float与“零值”比较 Float与零值进行比较的if语句怎么写? Float a=0.0; If((a=EPSINON)(a=EPSINON)); 解析:EPSINON是定义好的精度,如果一个数落在【0.0- EPSINON,0.0+ EPSINON】这个闭区间内,则认为在某个精度内其值与零值相等。 有关于EPSINON这样的定义:const fl

文档评论(0)

0004499 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档