在c语言中不可表示的字符是什么,C语言易错点综合.pdfVIP

在c语言中不可表示的字符是什么,C语言易错点综合.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在c语⾔中不可表⽰的字符是什么,C语⾔易错点综合 C语⾔原则:⼀切⼯作⾃⼰负责。 C语⾔哲学:语⾔中的任何部分都不应该通过隐藏的运⾏程序来实现。 1.当执⾏⼀个运算时,如果它的⼀个运算符是有符号的,⽽另⼀个运算符是⽆符号的,那么C语⾔会隐式地将有符号参数强制转换为⽆符号 数,并假设这两个数是⾮负数,来执⾏这个 运算。 例如:if( -1 0u) 这条语句中,由于0被定义成了⽆符号的数,表达式就等价于2^32-1 0,可以看到语句的判断结果就和原来的本意 完全不⼀样了。 2.为什么采⽤下⾯的⽅式定义,⽽不是直接#define int_min -2147483648 #define int_max 2147483647 #define int_min -int_max-1 为什么要特意把32位int的最⼩值常量写成-2147483647-1⽽不是-2147483648是因为编译器遇到-X这样的常量是先获得X的值与类 型,然后再对其取负,⽽对于32位以上机器的所有int类型都容不下2147483648这么⼤,所以会再寻找更合适的数据类型来表⽰,⽽寻 找合适类型这步在不同的C语⾔版本,不同的平台,不同的表⽰格式都有不同的适配顺序,这就导致了如果直接写-2147483648可能会是 unsigned的,可能会是long还可能会是long long型的,故⽤-2147483647-1的形式来消弭此歧义。 int dt1 = ( -2147483648 0),int dt2=( 0x800000000) 这⾥的dt1和dt2都是1,⽆论在何种机器上,这⾥存在⼀个隐式转化,转为int型数据。 3.众所周知,C语⾔中,所有⾮0 的数表⽰为真,0表⽰为假。那么null呢? 例如: if (null) printf(nihao); 这⾥的打印不会执⾏。因为,null的ASII值就是0,所以null此处就相当于0。 4.容易混淆的const const并不能把变量变成常量 !它仅仅表⽰这个符号不能被赋值。但它不能防⽌通过程序的内部(甚⾄是外部)的⽅法来修改这个值。const最 有⽤之处就在⽤它来限定函数的形参,这样该函数将不会修改实参指针所指的数据。 5.switch 语句 标准C语⾔规定⾄少允许⼀条switch语句有257个case标签(为了允许switch满⾜⼀个8bit字符的所有情况,即256种情况,再加上EOF) 在switch语句的左花括号和第⼀个case之间可以增加⼀些变量声明,从⽽进⾏⼀些局部存储的分配。但没有必要为这些变量赋初值,因为 它不会被执⾏,程序从后⾯的case开始执⾏。 所有的case都是可选的,任何形式的语句包括带标签的语句都是允许的。这⾥就会出现⼀些问题,例如: 如果把default打错 了,编译器是不会报错的。 注意:break语句事实上跳出的是最近的那层循环语句或switch语句。 6.字符串的连接 旧风格: printf(nihao \ fecheng gaoxing \ jiandao ni ); 新风格: printf(“nihao” fecheng gaoxing jiandao ni ); 即新风格下会⽤⼀连串相邻的字符串常量代替,在编译时⾃动合并。除最后⼀个字符串外,其他字符串末尾的\0’都被⾃动删除。当然, 这种特性⼜可能会引⼊新的问题,例如: char *p[] = { color, big disk, cray //此处少写⼀个逗号 nimei, nimhao,//这⾥的逗号存在与否没有什么意义 }; 缺少逗号的⼀⾏会和后⾯的字符串合并,导致最后数组的个数⽐预期的少⼀个。 7.C语⾔运算符优先级存在的问题 1) .的优先级⾼于*,“-”操作符⽤于消除这个问题。例如:*p.f。 其实际结果是对p取f偏移,作为指针,然后做解除引⽤的操作,等价于*(p.f) 2)函数()⾼于“*”。int *fp() 实际结果是相当于 int *( fp() )。 3)==和!=⾼于位操作符。如(val mask !=0)等价于 val(mask != 0) 4)==和!=⾼于赋值符。如 c = getchar() !=EOF 等价于 c=(getchar() != EOF) 5)算术运算⾼于移位运算。如 msb 4+lsb 等价于msb 6)逗号的优先级是所有运算符中最低的。 8.与空格有关的Bug 1)“\”字符可⽤于⼀些字符的转义,但如何在“\”和需要转义的字符间留上⼀两个空格就会出现问题。 2)z=y+++x; 这句话根据ANSI C规定的“maxima

文档评论(0)

A13865477551 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档