c语言常见错误点分析(1)

今天呢,想和大家一起去看一下我们在写代码的时候常见的一些错误。

1.=不同于==

我们知道=是赋值操作符,而==是一种比较的操作符,我们在写代码的时候容易将比较的操作符误写成赋值的操作符,例如:

#include<stdio.h>

int main()

{

int a=3;

int b=4;

if(a=b)

{

printf("helloword");

}

return 0;

}

这道题其实我们知道if语句中我们其实想比较的是a==b,在这个题中显然a!=b,并不打印helloword,当误写成a=b时,a的值为4,条件成立,打印helloword。

大家再来看一个例子:

#include<stdio.h>

int main()

{

int c=0;

while(c=' '||c==' \t'||c=='\n')

{

printf("强'');

}

return 0;

}

我们知道||操作符的优先级要高于=,而‘ ’的ASCII码值为32,c的值恒为1,所以一直循环打印

2.字符号的判断

我们大家知道/,*,和=,只有一个字符长,称为单字符符号,而像/*和= =等像这种多个字符,称为多字符符号,当编译器读入一个字符再读一个字符后编译器会进行判断,将其作为两个分别的符号判断,还是合起来作为一个符号判断,然后继续读入下一个字符,再对这三个字符进行判断,直到读入的字符串不再可能组成一个有意义的符号,另外符号的中间不能嵌有空白。例如:

 a+++b,我们知道当读入两个++时,就不能再读入下一个+了,因为+++并没有意义,而++有意义,会把++合起来看成一个字符。

等价于 a++  +b

而不能写成  a+ ++b

再入

y=x/*p;

这句的本意是将x除*p后的值赋给x,然而

我们知道/*是一段注释开始的标志,因此最终的结果是y=x,直接把x赋值给了y,

因此正确写法应该是y=x/(*p);

3.字符与字符串

用单引号引起的字符实际上代表一个整数,而用双引号引起的字符串,代表的确实一个指向无名数组起始字符的指针,该数组被双引号之间的字符和0初始化。

#include<stdio.h>

int main()

{

     printf("hello\n");  

     char arr[]={'h','e','l','l','o','\n',0};

       printf(arr);

return 0;

}

}

 我们看到最终打印的结果一样。

4.注意作为语句结束标志的分号

我们一起来看一段代码:

#include<stdio.h>

int main()

{

     int a=3;

int b=4;

if(a>b);

printf("helloword");

return 0;

}

我们来看一下程序的运行结果

 如果if语句后面没加;我们可以知道a>b为假,不打印helloword,但是一旦加上了,if语句会单独成为一条语句,对printf函数也就不起作用了,所以最终会打印出helloword.

5.函数调用

c语言规定,在函数调用时即使函数不带参数,也应该包括参数列表。因此,如果a是一个函数的话,那么a();是一个函数调用语句,而a;是一个什么也不做的语句。

6.字符串

 char*p="abcd",

在这里p存放的是abcd吗?答案当然不是,p其实指向的是一个包含abcd和\0,5个字符的数组的首元素的指针,char arr[5]={'a','b','c','d','\0'};   p=arr   p=&arr[0],p[i],是数据中某个元素,我们不妨尝试打印一下。

在这里如果再加上q=p; 这条语句对q[i]进行打印,打印出来的结果如何呢?q所指向的内存存储的字符串‘xYz’,因为p和q所指向的是同一块内存,所以p指向的内存中存储的也是'xYz',所以最终打印出来的结果是一样的。

 

   

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值