灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3412回复:0

C语言基础的13大注意要点

楼主#
更多 发布于:2013-04-25 12:45

不管是学习哪一种语言,都会有很多需要注意的地方,今天,深圳达内老师为大家列举一些C语言基础的注意点,希望大家在学习的时候能够有所帮助。

  1. 第一注意要点:在c语言中用补码表示负数,如:

      char c = 128;

      printf("%d ",c);结果是-128,c = 1000 0000 说明是负数,则所表示的负数是-(0111 1111 + 1)为-128

      也可看做c的范围是-128~127,而128已经越界了,则继续表示从-128开始循环

      ------------------------------------------------

      注意:0和正数的补码都是原码。。

      +0:原码:0000 0000,,反码:0000 0000 ,补码:0000 0000

      -0:原码:1000 0000,,反码:1111 1111 ,补码:0000 0000

      1,负数的反码是其原码除符号位外其他位取反

      2,负数的补码是取其反码后加1

      3,字长为8时,-128没有原码和反码,因为1000 0000表示0

      4,补码的出现解决了+0和-0的问题

  2. 第二注意要点:char *p = malloc(0);

      if(NULL == p)printf("error... ");

      elseprintf("right... ");

      p = "abc";是能分配成功的,因为p已经指向了一个确定的地址,不过存在非法访问的问题,,仅仅是引用"abc"的首地址,即把首地址赋给p

  3. 第三注意要点:浮点型:单精度:有效数字长度为7位 float f1 = 33333.33333 打印出f1 = 33333.332031

      双精度:有效数字长度为16位double d1 = 33333.333333打印出d1 = 33333.333333

      长双精度:19位

      浮点常量默认为double型

  4. 第四注意要点:char型可看做是int型的一种

  5. 第五注意要点:enum week{a,b,c,d,e,f,g,h };分别是0,1,2,3,4。。。

      enum week myweek ;sizeof(enum week)和sizeof(myweek)值都是4

  6. 第六注意要点:唯一的指针常量是NULL,数组名也是指针常量,一个字符串常量出现在表达式中,所引用的值是该字符串常量的首地址。而不是字符

      如:char *str = "linux";str表示的字符型指针指向linux字符串在内存中首地址。。。

      注意区别:char p[] = "linux";

      char *p = "linux";两种表达形式的字符串的存储方式不一样

  7. 第七注意要点:变量的存储方式:

      1、静态存储:static修饰的变量,以及普通全局变量含(extern修饰的)

      2、动态存储:栈。。局部变量(普通局部变量),寄存器变量

      static的作用:

      1、修饰局部变量可改变生存周期

      2、修饰全局变量可改变作用于范围

      3、修饰函数也是限定作用于范围

  8. 第八注意要点:typedef的作用:提高程序的可移植性,简化声明const的作用:定义只读变量

      -----1,const int i = 3;此时并未把i放入内存中,在被引用时,int x = i;int y = i;只是给出了变量的地址,都只会产生一份i的拷贝,而宏定义的话则会产生多分拷贝

      -----2,提高效率,编译期间不分配存储空间

  9. 第九注意要点:%运算和switch(c)。。case中只能用整型量..case中只能用整形或字符型的常量或常量表达式

  10. 第十注意要点:自动类型转换规则:char,short->int->(unsigned (int) )/ (float) ->long ->double

  11. 第十一注意要点:%s以字符串格式输出时,遇到''结束。

      char *p = "linux";

      gets(p);会出现段错误,p指向一片常量区,不能写,会出现段错误p = "hello";不会错,只是把p改变了指向

  12. 第十二注意要点:二维数组名指向数组首元素的首地址,a[3][4];a表示一个一维数组名,指向一个一维数组首元素元素的首地址,i+1是以列数偏移

  13. 第十三注意要点:C语言内存分配:

      堆区:malloc动态分配,free释放

      栈区:自动分配

      数据段:存放静态变量和全局变量

      ----------------------------------------

      1、常量区(只读数据段):存放字符串常量和const修饰的全局变量,只可被访问不可被写入,生命周期同程序的运行过程,值不能被修改

      2、静态区(普通数据段):存放普通全局变量和所有static修饰的变量

      3、局部变量被const修饰,仍然存放在栈区,可以通过指针改变值,但是不能直接显示的去修改值

      4、普通的整型、浮点型或字符型常量在使用时是通过立即数实现的,并没有额外分配存储区

      -----------------------------------------

      BSS段:未初始化的数据段

      代码段:。。。。

      关键字注意点:

      1、void:任何其他类型的指针可以无需强转赋给void*

      ----void v;不合法,不能代表一个真是的变量

      ----void *v;合法,允许定义一个空类型的指针

      2、const;

      ----修饰只读变量

      ----节省空间,避免不必要的内存分配,提高效率

      ----修饰一般变量,数组,指针,函数返回值和传入参数。

      3、volatile

      4、extern

      5、enum sizeof(。。)为4

      6、typedef和存储类型指示符是等价的,,

      typedef不能和static等存储类型指示符同时使用,因为每个变量只能有一种存储类型=》所以typedef static int int32错误

      typedef int int32;

      unsigned int32 j = 10;错误,typedef 不支持此种替换

      存储类型指示符:extern,static,auto,register

      存储类型指示符的位置是任意的(但要求在变量名和指针*之前)

      int const static t;

      const int static t;

      const static int t;

      static const int t;几种表示方法是一致的。

      上述表达式中的static可以换成typedef

      typedef const int t; 都表示把t表示为const int 类型

      (void (*)())0x1000 跳转到某个地址去执行指令

      经过上述深圳达内专家的介绍,相信你在学习C语言时就会更得心应手


喜欢0 评分0
游客

返回顶部