ITPub博客

首页 > 应用开发 > > C programming language 知识点

C programming language 知识点

作者:stzgq 时间:2019-09-06 15:14:59 0 删除 编辑

变量类型初始化时机默认初始化值初始化值限制

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实参。如下图

              

   

            注意:函数实参,默认会强制类型转换,所以调用时无需手动强制转换。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2478/viewspace-3119356/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-05

  • 博文量
    104
  • 访问量
    1049