Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8845
  • 博文数量: 4
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-19 17:21
文章分类

全部博文(4)

文章存档

2017年(3)

2014年(1)

我的朋友

分类: C/C++

2017-04-27 13:11:08

1. 变量

变量类型 初始化时机 默认初始化值 初始化值限制
automatic 进入块时 任意expression
external 程序执行前 0 任意const expression
static 程序执行前 0 任意const expression

    a) const 可在all三种变量之前。

    b) 当const修饰数组时,代表数组元素不可变;当修饰指针时,代表被指内容不可变。
            注意: const int * a / int const *a(常量指针,被指内容不可变);int *const a(指针常量,a本身不可变)

2. 除法运算规则
    a)  C89及之前:负数除法的结果不确定,与上溢下溢结果相同
    b)  C99,C++0X及之后
                (1)m/n向0方向取整
                (2)m%n = m - (m/n)*n
            注意:5%(-3) 不同于 (-5)%3
    
3. 常量字符
    a) 'm'
    b) '\m'
    c) '\0mn'        //1. m和n是八进制数字0-7;2. 向右填充,即'\0m' = '\00m' (gcc实验结果,不确定是否是C语法规范)
    d) '\xmn'        // 十六进制,其余同上

4. 类型转换
    a) 通用规则:在一个表达式中出现多种类型时,表示范围小的转为表示范围大,可以保证不丢失精度,即还能转回来,但转换结果有时不保证(参见a1,a2)。如果不存在最大范围类型(其他都是其子集),则结果不确定(例如unsign int 与 int)。
    a1) char/short -> int   如果char的首位为1,那么int的符号就不确定(有的机器取其作为符号位,然后把整个char中内容(含首位1)作为数字值;而有的机器则均为正)。能打印出的char首位一定为0,但不能打印的char则最好使用时指明(un)signed。首先尝试转为int,放不下的话就转为unsigned int,称为integer promotion。
    a2) double -> float 结果是截取还是轮转,不确定。
    b) 函数调用时参数转换:当被调函数未声明(no prototype)时,会生成一个默认的声明,并将按此声明准备实参,short/char实参会转为int实参,float实参会转为double实参。如下图
                 
            注意:函数实参,默认会强制类型转换,所以调用时无需手动强制转换。




阅读(346) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~