加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

C语言中的“六大陷阱”,你可能已经知道了两个

发布时间:2019-02-21 18:55:51 所属栏目:建站 来源:胆小的麦迪文
导读:前戏 要领略一个C 措施,仅仅领略构成该措施的标记是不足的,我们还必要领略这些标记是怎样构成声明、表达式、语句和措施的。本日我们就来接头一下纷歧样的语法布局。 1. 正确领略函数声明 你是否见过这样的代码(*(void(*)())0)();,你能知道这是上面意思

前戏

要领略一个C 措施,仅仅领略构成该措施的标记是不足的,我们还必要领略这些标记是怎样构成声明、表达式、语句和措施的。本日我们就来接头一下纷歧样的语法布局。

C说话中的“六大陷阱”,你也许已经知道了两个

1. 正确领略函数声明

你是否见过这样的代码“(*(void(*)())0)();”,你能知道这是上面意思吗?

看不懂不消担忧,下面我们来说明一下:任何C变量的声明都由两部门构成:范例以及一组相同表达式的声明符(declarator)。声明符从外貌上看鱼表施展有些相同,对他就只应该返回一个声明给定的功效。(void (*)()0)是将常数0 转型为“指向返回值为void 的函数的指针”范例。而(*(void(*)())0)();就可以当作是一个函数挪用,末端的分号使得表达式成为一个语句。虽然我们也可以行使typedef下世表达式越发清楚:

  1. typedef void (*funcptr)(); 
  2. (*(funcptr)0)(); 

2. 运算符的优先级题目

在 C说话中,运算符优先级有15个之多,假如不知道运算符的优先级我们在处理赏罚题目,说明代码时,就很是被动,那么我们可以对运算符举办简朴的分组,相识各组运算符之间的相对优先级,那么记起来就相对简朴了,可以简朴的记做:!> 算术运算符 > 相关运算符>&&>|| > 赋值运算符。

3. 语句竣事符的分号题目

C说话以分号“;”,作为语句竣事的符号,那么假如在表达式后多写了分号,会呈现什么功效呢?这个分号大概会被视作一个不会发生任何现实结果的空语句,可能编译器会由于这个多余的分号发生一条告诫信息,可以按照告诫信息去掉这个分号。但一个破例就是在if 可能while语句之后多写一个分号,此时原本在if可能while之后的语句纵然一条单独的语句,鱼前提判定没有了任何关系。请看一下代码:

  1. If(x > y)return; 
  2. If(x > y);return; 

这两句完满是纷歧样的。

4. Switch 语句题目

C说话中的switch,在case分支后都必要添加一个break;语句,否则会已知顺着语句执行下去,达不到我们必要的结果。

5. 函数挪用

与其他措施计划说话差异,C说话要求:在函数挪用时实时函数不带参数,也应该包括参数列表,,因此,假如f 是一个函数,f();一个函数挪用,而f;却是一个什么也不做的语句。

6. else 悬挂题目

我们常常听到说else要和if 配对行使,然而在我们写代码时,照旧会常常堕落,譬喻如下代码:

这段代码的本意是分为两种环境,x 便是0 不便是0,然而上面的代码表达的意思却截然差异。即 想不便是0,措施不做处理赏罚,x 便是0时,判定y的值,做出差异的处理赏罚。

【编辑保举】

  1. 措施员守卫提拔之路,从更有用地评价本身的事变开始
  2. “流离地球”打算最终乐成,内里这位措施员功不行没!
  3. 措施员是吃芳华饭的?一张图道尽措施员的成长偏向
  4. 措施员专属的免费电子书下载网站,你知道你几个?
  5. 措施员们为什么热衷于发现轮子?
【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读