1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
重学C语言

重学C语言 1、简述 1 2、一些真相 2 3、C缺陷 3 3.1多做之过 3 3.1.1Switch语句 3 3.1.2相邻字符串常量的自动连接 3 缺省情况下函数名字的全局可见性 3 3.2 误做之过 4 3.2.1符号重载 4 3.2.2 复杂的运算符优先级规则 4 3.3少做之过 5 3.3.1 空格的作用 5 3.3.2一些代码能轻松通过编译,但运行起来就是垃圾 5 4、C语言声明 6 4.1 C语言声明概述 6 4.2 C语言中的组合类型声明 6 4.3 C语言声明分析 7 5、指针与数组 8 5.1 数组与指针的异同 8 5.2 二维数组 8 6、数组传参 9 1、简述 C语言作为我平时用的最多的一门编程语言,时常感觉用的不那么得心应手,除去标准C库,就其语言本身而言,还有若干盲区。如果你只会用一些逻辑语句,不会用指针操作内存、不会用头文件整理工程、看不明白C语言声明,混淆传参过程,甚至连运算符的优先级都搞不清楚,再熟练也只能说知道C语言的一点皮毛,真正的精髓是指针,当然也是难点。不容易理解的地方包括指针与数组、声明、函数传参。距初学C语言四年后,重新学习,查缺补漏,幸得好书一本《C专家编程》,站在更高的地方审视C语言的好与坏,精髓与学习之道,收获颇丰,码出一些笔记跟大家交流。 可以把语言看成一门协议,最初的设计是有其背景的,协议有好有坏,性能不可能是最佳的,语言也是,标准化以后的ANSI C语言有它的优点,也有它“难以忍受”的缺点,当然,即使是缺点,也不会再优化,不然新的编译器将会使以前无数正常的代码出现令coder莫名其妙的bug。站在历史的、设计者的角度重新学习,而不是去抠具体的知识点,那种豁然开朗的感觉真好。就像搞嵌入式没听说过startup.s,做ARM不明白bootloader内容,玩51不知道idata、xdata,写工程不懂模块化没听说过链接描述文件,有些真相你如果接触不到,你就永远都是业余选手。 2、一些真相 1、根据C语言的设计哲学,它排斥强类型,允许程序员在需要时可在不同的类型对象之间赋值,许多C程序员仍然认为“强类型”不过是敲击键盘的无用功。ANSI C规定:执行算术运算时,操作数类型如果不同,就会发生转换,数据类型朝着浮点精度更高、长度更长的方向转换,如果整数转换为signed不会丢失信息则会转成signed,否则转换为unsigned。也就是采用值保留原则(value preserving)把几个整数操作数混在一起使用,结果类型可能是有符号数也可能是无符号数,取决于操作数的相对大小 2、C语言的很多特性在设计之初是为了方便编译器的设计者,比如其下标从0开始、比如表达式中的数组名可以看做是指针,比如用register关键字来定义热门变量,放在寄存器里存储。 3、typedef与#define的区别。后者是宏定义,最好只用于命名常量,并为一些适当的结构提供简记,宏名称应该大写,这样便容易与函数调用区分开来。Typedef是类型定义,它是一种有趣的声明形式,它为类型引入新的名字而不是为变量分配空间,类似于宏定义但又有关键性的区别。Typedef一般用于简法表示指向其它东西的指针,如:typedef char * string;。它与宏定义有两点关键区别: 可以用其它类型声明符对宏类型进行扩展,但typedef定义的类型则不能 #define peach int unsigned peach i ; //no problem typedef int banana; unsigned banana i ; //it is wrong! 在连续的几个变量声明中,用type可以保证所有变量均为同一类型,而用宏定义则没有办法保证 #define int-ptr int * int-ptr a,b; 经过宏扩展后,变为int *a,b ,b就变成整型了。 Typedef有几个使用原则,它应该用在数组指针及函数的组合类型定义中,而且不要为了方便起见对结构使用typedef,那样唯一的好处就是省去了struct,但是也省去了它的提示作用,不利于程序的可读性。 Typedef之所以被称为存储类型符,只是为了语法上更加方便而已。 4、应该去阅读ANSI C标准,从中寻找乐趣与裨益。ANSI C标准6.3.2.2节,每个实参都应该有自己的类型,这样它的值经过实参与形参的一致性检验后就可以赋给形参。也就是说传参类似于赋值,所以如果写一个交换值的小函数,不应该直接传值,而是传递指针。 5、关于指针赋值。指针赋值有两个原则:一个是两个操作数都是指向有限定符或者无限定符的相容类型。另一个,左侧指针指向的类型必须具有右侧指针指向类型的全部限定符。 Char *cp; Const char *cpp; Cpp=cp; 而

文档评论(0)

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

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

1亿VIP精品文档

相关文档