C语言深度解剖(c语言进阶的好教程)

所需积分/C币:9 2011-12-04 08:01:07 953KB PDF
40
收藏 收藏
举报

C语言深度解剖(c语言进阶的好教程) 目 录 第一章 关键字................................................................................................................................... 9 1.1,最宽恒大量的关键字----auto..........................................................................................11 1.2,最快的关键字---- register............................................................................................... 11 1.2.1,皇帝身边的小太监----寄存器............................................................................. 11 1.2.2,使用 register 修饰符的注意点.............................................................................11 1.3,最名不符实的关键字----static........................................................................................ 12 1.3.1,修饰变量............................................................................................................... 12 1.3.2,修饰函数............................................................................................................... 13 1.4,基本数据类型----short、int、long、char、float、double........................................... 13 1.4.1,数据类型与“模子”............................................................................................... 14 1.4.2,变量的命名规则...................................................................................................14 1.5,最冤枉的关键字----sizeof............................................................................................... 18 1.5.1,常年被人误认为函数...........................................................................................18 1.5.2,sizeof(int)*p 表示什么意思?........................................................................18 1.4,signed、unsigned 关键字................................................................................................ 19 1.6,if、else 组合.................................................................................................................... 20 1.6.1,bool 变量与“零值”进行比较............................................................................... 20
大小端模式对型数据的影响 ,如何用程序确认当前系统的存储模式? 关键字 枚举类型的使用方法 ,枚举与 宏的区别 ,伟大的缝纫师 关键字 ,关于马甲的笑话 ,历史的误会也许应该是 与 的区别 与 第二章符号 注释符号 ,几个似非而是的注释问题 ,怎样才能写出出色的注释 ,安息吧,路德维希凡贝多芬 大师们用注释讨论天气问题 出色注释的基本要求 ,接续符和转义符 单引号、双引号 ,逻辑运算符 ,位运算符 ,左移和右移 的值为多少? ,花括号 操作符 ,贪心法 的值是多少? ,运算符的优先级 运算符的优先级表 些容易出错的优先级问题 第三章预处理 ,宏定义 ,数值宏常量 ,宇符串宏常量 用用 宏定义注释符号? 宏定义表达式 ,宏定义中的空格 ,条件编译 ,文件包含 预处理 顶处理 预处理 ,为什么会有内存对齐 ,如何避兔内存对齐的影响 运算符 颀算符 第四章指针和数组 ,指针 ,指针的内存布局 ,与防盗门的钥匙 和 有什么区别? ,如何将数值存储到指定的内存地址 ,编译器的? ,如何达到手中无剑、胸中也无剑的地步 ,数组 ,数组的内存布局 ,数组名作为左值和右值的区别 ,指针与数组之间的恩恩怨怨 ,以指针的形式访问和以下标的形式访问 以指针的形式访问和以下标的形式访问指针 ,以指针的形式访问和以卜标的形式访问数组 ,和的区别 ,指针和数组的定义与声明 ,定义为数组,声明为指针 ,定义为指针,声明为数组 ,指针和数组的对比 ,指针数组和数组指针 指针数组和数组指针的内存布局 再论和之间的区别 ,地址的强制转换 ,多维薮组与多级指针 ,二维数组 假想中的二维数组布局 ,内存与尺子的对比 的值为多少? ,二级指针 ,二级指针的内存布局 ,数组参数与指针参数 ,一维数组参数 ,能否向函数传递一个数组? 无法向函数传递个数组 ,一级指针参数 ,能否把指针变量本身传递给一个函数 无法把指针变量本身传递给一个函数 ,二维数组参数与二维指针参数 函数指针 ,函数指针的定义 ,函数指针的使用 函数指针使用的例了 这是什么? 这是什么? ,函数指针数组 两数指针数组的指针 第五章内存管理 ,什么是野指针 栈、堆和静态区 ,常见的内存错误及对策 ,指针没有指向一块合法的内存 ,结构体成员指针未初始化 ,没有为结构体指针分配足够的内存 函数的入口校验 ,为指针分配的内存太小 ,内存分配成功,但并未初始化 ,内存越界 ,内存泄漏 ,告老还乡求良田 ,如何使用 函数 函数中请字节内存 内存释放 ,内存释放之后 ,内存已经被释放了,但是华续通过指针来使用 第六章函数 ,函数的由来与好处 ,编码风格 函数设计的一般原则和技巧 数递归 ,一个简单但易出错的递归例子 ,不使用任何变量编写 函数 第七章文件结构 ,文件内容的般规则 ,文件名命名的规则 第一章关键字 每次讲关键字之前,我总是问学生:语言有多少个关键字? 怎么用?它是函数 吗?有些学生不知道语言有多少个关键字,大多数学生往往告诉我是函数,因为 它后面跟着一对括号。当投景仪把这个关键宁投到幕布上时,很多学生表情惊讶。有些 关键字从没见过,有的惊讶语言关键字竟有个之多。更有甚者,说大学老师告诉他 们 是函数,没想到它居然是关键字!由此可想而知,大学的计算机教育是多么失败! 表语言标准定义的个关键字 关键字 意 义 声明自动变量,缺省时编译器一般默认为 声明整型变量 声明双精度变量 声明长整型变量 声明字符型变量 声明浮点型变量 声明知整型变量 声明有符号类型变量 声明无符号类型变量 声明结构体变量 声明联合数据类型 声明枚举类型 声明静态变星 用于开关语句 开关语句分支 开关语句中的其他分支 跳出当前循环 声明寄存器变量 声明只读变量 说明变量在稈序执行中可被隐含地改变 用以给数据类型取别名当然还有其他作用 声明变量是在其他文件正声明也可以看做是引用变量 子程序返回语句可以带参数,也可不带参数 声明函数无返回值或无参数,声明空类型指针 结束当前循环,开始下一轮循环 循环语句的循环体 循环语句的循环条件 条件语句 条件语句否定分支与连用 种循环语句可意会不可言传 无条什跳转语句 计算对象所占内存空间大小 下面的篇幅就·讲解这些关键字。但在讲解之前先明确两个概念: 什么是定义?什么是声明?它们有何区别 举个例了: 关于,后面解释 哪个是定义?哪个是声明?或者都是定义或者都是声明?我所教过的学生几乎没有一 人能回答上这个问题。这个十分重要的慨念存大学里从来没有被提起过! 什么是定义:所谓的定义就是编译器创建一个对象,为这个对象分配一块内存并给它 取上一个名字,这个名字就是我们绎常所说的变量名或对象名。但注意,这个名字一日和 这块内存匹配起来可以想象是这个名字嫁给了这块空间,没有要彩礼啊。,它们就同 生共死,终生不离不弃。并且这块内存的位置也不能被改变。一个变量或对象在一定的区 域内(比如函数内,全局等)只能被定义一次,如果定义多次,编译器会提示你重复定义 同一个变量或对象。 什么是声明:有两重含义,如下 第一重含义:告诉编译器,这个名宇凵经匹配到一块内存上了伊人已嫁,吾将何去何 从?何以解忧,唯有稀粥,下面的代码用到变量或对象是在别的地方定乂的。声明可以出 现多次。 第二重含义:告诉绵详器,我这个名字我先顶定了,别的地方再也不能用它来作为变量 名或对象名。比如你在图书馆自习室的某个座位上放了一本书,表明这个座位已经有人预 订,别人再也不允许使用这个座位。其实这个时候你本人并没有坐在这个座位上。这种声 明最典型的例子就是函数参数的声明,例如 好,这样一解释,我们可以很清楚的判断是定义;是声明 那他们的区别也很清晰了。记住,定义声明最重要的区别:定义创建了对象并为这个 对象分配了内存,声明没有分配内存一个抱伊人,一个喝稀粥。 1.1,最宽恒大量的关键字-auto 它很宽恒人量的,你就当它不存在吧。编译器在默认的缺省情况下,所有变量 都是的。 1.2,最快的关键字-- register 这个关键字请求编译器尽可能的将变量存在内部奇存器中而不是通过内 存寻址访问以提高效率。注意是尽可能,不是绝对。你想想,一个的寄存器也就那么 几个或几十个,你要是定义了很多很多 变量,它累死也可能不能全部把这些变量放 入寄存器吧,轮也可能轮不到你。 1.2.1,皇帝身边的小太监一寄存器 不知道什么是寄存器?那见过太监没有?没有?其实我也没有。没见过不要紧,见过就 麻烦大了。,大家都看过古装戏,那些皇帝们要侻读奏章的时候,大臣总是先将奏章交 给皇帝旁边的小太监,小太监呢再交给皇帝同志处理。这个小太监只是个中转站,并无别 的功能 好,那我们再联想到我们的 不就是我们的呈帝同志么?大臣就相当于我们 的内存,数据从他这拿出来。那小太监就是我们的寄存器了(这里先不考虑的高速缓 存区)。数据从内存里拿出来先放到寄存器,然后再从寄存器里读取数据来处理,处理 完后同样把数据通过寄存器存放到内存里,不直接和内存打交道。这里要说明的一点 是小太监是`动的从大臣手里接过奏章,然后主动的交给皇帝同志,但寄存器没这么自觉, 它从不主动干什么事。一个皇帝可能有好些小太监,那么一个也可以有很多寄存器, 不同型号的拥有寄存器的数量不一样。 为啥要这么麻烦啊?速度!就是因为速度。寄存器其实就是一块一块小的存储空间,只 不过其存取速度要比内存快得多。进水楼台先得月嘛,它离很近 一伸手就拿到 数据了,比在那么大的一块内存里去寻找某个地址上的数据是不是快多了?那有人问既然 它速度那么快,那我们的内存硬盘都改成奇存器得了呗。我要说的是:你真有钱! 1.2.2,使用 register修饰符的注意点 虽然寄存器的速度非常快,但是使用 修饰符也有些限制的 变量必须是 能被寄存器所接受的类型。意味着 变量必须是一个单个的值,并且其长度应小 于或等于整型的长度。而且 变量可能不存放在内存中,所以不能用取址运算符“” 来获取 变量的地址 1.3,最名不符实的关键字- static 不要误以为关键字很安静,其实它一点也不安静。这个关键字在语言里主要有 两个作用,对它进行了扩展 1.3.1,修饰变量 第一个作用:修饰变量。变量又分为局部和全局变量,但它们都存在内存的静态区。 静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用声明也没法 使用他。准桷地说作用域是从定义之处丌始,到文件结尾处结朿,在定义之处前面的那些 代码行也不能使用它。想要使用就得在前面再加 。恶心吧?要想不恶心,很简单, 直接在文件顶端定义不就得了。 静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他 函数也用不了。由于被修饰的变量总是存在内存的静态区,所以即使这个函数运行结 束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。 和的值分别是什么为什么? 1.3.2,修饰函数 第二个作用:修饰函数。两数前加使得函数成为静态函数。但此处 的含义 不是指存储方式,而是指对函数的作用域仅局限于本文件所以又称内部函数。使用内部函 数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件 中的函数同名。 关键字有着不寻常的历史。起初,在中引入关键字是为了表示退出个 块后仍然存在的局部变量。随后, 在中有了第二种含义:用来表示不能被其它文件 访问的全局变量和函数。为了避免引入新的关键字,所以仍使用关键字米表示这第二 种含义。 当然,里对赋予了第三个作用,这里先不讨论,有兴趣的可以找相关资料研 究 1.4,基本数据类型-— short、int、long、char、 float、 double 短整型 语言包含的数据类型如下图所刁 整 整型 数值类型 长整型 单精度型 基本类型 浮点型 双精度型 字符类型 数组 结构体 构造类型 据 共用体 类 枚举类型 型 指针类型 空类型

...展开详情
试读 127P C语言深度解剖(c语言进阶的好教程)
立即下载
限时抽奖 低至0.43元/次
身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
  • 分享宗师

关注 私信
上传资源赚钱or赚积分
最新推荐
C语言深度解剖(c语言进阶的好教程) 9积分/C币 立即下载
1/127
C语言深度解剖(c语言进阶的好教程)第1页
C语言深度解剖(c语言进阶的好教程)第2页
C语言深度解剖(c语言进阶的好教程)第3页
C语言深度解剖(c语言进阶的好教程)第4页
C语言深度解剖(c语言进阶的好教程)第5页
C语言深度解剖(c语言进阶的好教程)第6页
C语言深度解剖(c语言进阶的好教程)第7页
C语言深度解剖(c语言进阶的好教程)第8页
C语言深度解剖(c语言进阶的好教程)第9页
C语言深度解剖(c语言进阶的好教程)第10页
C语言深度解剖(c语言进阶的好教程)第11页
C语言深度解剖(c语言进阶的好教程)第12页
C语言深度解剖(c语言进阶的好教程)第13页
C语言深度解剖(c语言进阶的好教程)第14页
C语言深度解剖(c语言进阶的好教程)第15页
C语言深度解剖(c语言进阶的好教程)第16页
C语言深度解剖(c语言进阶的好教程)第17页
C语言深度解剖(c语言进阶的好教程)第18页
C语言深度解剖(c语言进阶的好教程)第19页
C语言深度解剖(c语言进阶的好教程)第20页

试读结束, 可继续阅读

9积分/C币 立即下载