你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
c语言几点注意事项
 
最近用C,出现了几个低级错误,现列举一下。

1、移位符<<、>>比+、-优先级低,如

  int x,y;

  x = 1;

       y = x<<2+1;             //等价于 y = x<<(2+1);  

  结果为8,而不是5

2、蹩脚的除法运算

  float result;

        result = 1/3;

  result结果为多少?是0而不是0.333333,因为1和3都为整数,整除之后为0

可以强制为浮点数。

3、最好不要用char 判断数字

4、变量要初始化。

5、char *ptr = "hello";//并不是复制字符串,而是复制一个地址

不等于下面两条语句

  char *ptr;

    *ptr = "hello"; //试图将字符串的地址复制到ptr所指向的单元,而不是ptr本身。

而是等于

  char *ptr;

    ptr = "hello";

6、char s[20];

   s = "hello"; //错误,因为s只是一个指针常量

  char s[20] = "hello"; //正确,只有在定义时,可以赋初值,且为char型。

  strcpy(s,"hello");//正确

7、const的局限性

  在程序中,即使变量或参数有类型限定符const,仍然可以改变它的值,关键字const防止变量或参数作为左值使用,但在C语言中,仍然有其它方法可以改变这种单元的值。例如:strcpy函数。

  char s[] = "hello";
  const char *p = s;
  strcpy((char *)p, "XYZ");

 最后s[] 为"XYZ",使用库函数strcpy以及强制类型转换,破坏了const类型限定符的功能。

8、const变量和宏

  在C中,const变量不能用于指定数组的长度,也不准在swithc语句中把const变量作为case后的常量值来使用。

  但在C++用,这两个限制,已经被取消了。

9、寄存器变量必须定义在函数体内,下面定义方式是非法的

register float x = 0;                //错误

void g(void)

{

}

10、把地址符运算&应用于存储类别为register的变量是错误

11、对变量i取余操作

方法一:a = i%8;

方法二:a = i-(i>>3<<3); //注意,一定要加括号,因为移位符比减号优先级低

方法三:a = i & 0x07;  //最优操作

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089