C语言拾遗(一)

 

1,const在c语言中的含义是readonly,由其定义的变量并不能作为常量使用,例如定义数组时以及作为switch...case中case后的整型或

字符型常量时。c++做了相应扩展。可以用cc/gcc/g++作为测试。

2,枚举类型enum和#define定义宏的区别

(1)枚举类型是在编译期间确定的常量,而宏定义是在预编译期间的常量

(2)枚举定义的符号在调式期间可以显式,而#define定义的宏是是在预编译期间的直接替换,调式不可见。

3,const和typedef结合的陷阱

typedef   char*   cs;//把cs看成是一种数据类型。     

所以   const   cs   abc;//   abc   的类型当然就是   char*;      

再因为有const   护体(当然是护abc了),所以   const   作用于   abc   当然不是   abc   所指向的数据,故   写作   :   

char*   const   abc;

4,define和typedef的一点区别

 (1)#define INT32 int

      unsigned INT32 a=5;//合法:直接替换

 (2)typedef int INT32

      unsigned INT32 a=5;//不合法:原因是typedef不支持这种扩展(unsigned等关键字和typedef后的名称结合)

5,关于注释的一点说明

 (1)int/*...*/i是合法的,/*...*/被编译器替换成空格

 (2)x/*y正确吗?编译器会报错,把/*当成注释的前半部分,正确的写法是x/ *y或者x/(*y),二者含义一样。

 (3)//abc /

        def

这是正确的注释,因为/是对下一行的接续,编译器会去掉/并接续到下一行。

6,一些预编译常量(ANSI定义的宏)

_FILE_:表示正在编译的文件名

_LINE_:正在编译的文件的行号

_DATE_:编译时的日期

_TIME_:编译时的时间字符串

_STDC_:判断该文件是不是定义成标准C程序

7,指向数组的指针

        char  a[5] = {'a','b','c','d'};

        char (*p)[10] = &a;

在g++下会报错误,因为数组的大小不一样。

8,关于指针运算和强制类型转换

char a = 'a';

  char *p = &a;

p+1=? //p的地址+sizeof(char)

(int *)p + 1=? //p的地址+sizeof(int)

(int)p+1=? //p的地址+1

9,malloc分配0字节的空间时,char *p = (char *)malloc(0);

这是if(NULL == p)判断假,即p!=NULL;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值