常见c语言语法错误,C语言常犯错误(二)——语法错误

一:理解函数声明:

float num1,num2;//含义:对其求值时num1,num2是浮点型的。

float ((num1)); //含义:对其求值时((num1))是浮点型的,由此可知num1也是浮点型的。

float ff(); //含义:表达式ff()求值的结果是一个浮点数,也就是说ff是一个返回值为浮点数的函数

float *pf; //含义:*pf是一个浮点数,pf是一个指向浮点数的指针。

以上的几种声明还可以组合起来,就像在表达式中进行组合的一样。

ex:

float *g(); //表示:该函数的返回值类型为指向浮点数的指针,

float (*h)()  //表示:h所指向的函数返回浮点型

(float (*)()) //表示:指向返回值为浮点类型的函数指针的类型转换符

(*(void(*)())0)() //构造这类表达式只需要按照使用的方式声明

二:运算符的优先级问题:

例1.if((flags & FLAGS) != 0)

不能写成

if(flags & FLAGS != 0)

因为 != 的优先级高于&。

例2.假设hi与low是0——15之间的整数,而res是一个整数且高四位与hi完全一致,且低四位与low完全一致,不能写成

res = hi<<4 + low;

因为+的优先级要高于

说明:用括号虽然能够解决优先级的问题,但是程序当中用太多的括号则会降低程序的可读性。

优先级最高:数组下标操作符,函数调用操作符,各种结构成员的选择操作符。结合方式为自左向右。

优先级次之:单目运算符。*P++;相当于*(P++)

优先级次之:双目运算符。优先级由高到低:算数——>移位——>关系——>逻辑——>条件

三:语句结束标志的分号:

ex:

if(a>b);

y=x;

if(a>b)

y=x;

完全不同,分别相当于执行了:

if(a>b)

{}

y=x;

if(a>b)

{

y=x;

}

缺了分号同样会造成很大的危险:

ex:

if(n<3)

return

logrec.date = x[0];

logrec.time = x[1];

logrec.code = x[2];

分析:return后面缺少一个分号,但是程序会编译通过,只是将logrec.date = x[0]当做程序的返回值。即:

if(n<3)

return logrec.date = x[0];

logrec.time = x[1];

logrec.code = x[2];

四.switch语句

使用该语句时要注意case选项后面的break。因为C语言中把case标号当做真正意义的标号,因此程序的控制流程会径直通过case语句。而不会受到任何影响。

如果程序员“刻意”省去某一个case的break,则会表达出用其它语言难以表达的一些控制结构。

五.函数调用:

C语言中即使函数不带参数,也应该有参数列表。

ex:

f();

而如果写成

f;

则表示该处什么都不做,更确切的说这个语句计算函数f的地址。却不调用该函数。

六:“悬挂”else引发的问题:

else始终与同一对括号内最近的未匹配的if结合。在使用的时候要注意用括号制定if的范围等等。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值