C编程的细节(3)
来源:互联网 发布:淘宝刷手有什么风险么 编辑:程序博客网 时间:2024/06/11 08:18
1.函数的传参是从左到右传的,如printf均是从左到右接收值的,所以其中包含的一些值得修改的表达式的位置就很有必要了。
例: int i=0; printf("%d ,%d",i,++i);其打印的值为:1 ,1。
2.数组的标识符是不能进行自增自减运算的,即使表示地址的指针可以和整型数值相加减,因为其不是作为左值使用的。例如数组:int arr[10];其表示地址的指针的类型是(int *const arr),该指针只能解引用,不能赋值运算。
3.数据类型即使进行强制转换,其内部存储的形式不变。强制转换类型是操作符。(强制转换类型是在编译之时确定的还是在函数执行之时确定的),例如浮点型强制转化为整型,是调用函数进行转化的,执行函数则是进程中。
4.bool类型的存储大小是1byte。在判断语句中,按照其运算规则进行运算,将最后所得的值进行布尔比较,如果为0则为假,否则真。在此特别注意无符号整形与有符号数运算结果为无符号数,而有符号数若是按无符号数进行解释,则结果会有偏差。
5.在C代码中,有一些操作会在预处理时就做出,有些会在编译器中完成。
如预处理中会完成有:宏定义的替换;
编译优化中会完成的有:sizeof类型的判定替换。一些简单的常量计算,还有一些简单的取反操作,const定义的变量;
例如:-(-10)会在编译中优化为10,而int i=0; -(-i)不会进行优化,会在CPU中一步步指行。
i=30+20;会在编译中优化为40;
i=30+20;此表达式的汇编代码如下:
003E1405 C7 45 F8 32 00 00 00 mov dword ptr [i],32h
一些操作在编译成可执行程序之前进行处理,可减少以后程序运行时CPU的运行的步骤,提高效率。
6.有符号的整型与无符号整形进行运算,其结果为无符号类型。
7.变量有四种类型:整型,浮点,指针,自定义结构体。字符型属于整型类型。
8.整型之间的赋值:
大类型数据赋值给小类型数据要发生截断,小类型数据赋值给大类型数据要补位。
大类型数据赋值给小类型时,若其值在小类型的取值范围值中,则正常赋值补位,若不再取值范围中会发生截断,所赋的值发生改变。小类型赋值给大类型数据是要考虑其符号,是有符号还是无符号,补位是要补0还是要补1。无符号是低位复制,高位补零。有符号时低位复制,高位当其为正数补0,当其为负数则补1。
9.浮点数之间的赋值:
大类型向小类型赋值,若大类型的值在小类型的范围中,可赋值但不精确。小类型可以向大类型赋值可赋值不精确。
大类型向小类型赋值,若不在其范围内则会发生丢失数值,显示警告但不终止。
若给浮点数赋值一个超出其范围的数值,则会发生常量算法中溢出,显示警告并终止。
浮点数之间赋值不精确,浮点数赋值常数也不精确。
- C编程的细节(3)
- C编程的细节(1)
- C编程的细节(2)
- C编程细节(4)
- C语言编程细节
- c编程规范细节
- C\C++编程细节学习
- 编程实践中C语言的一些常见细节
- 编程的小细节
- 编程的一些细节
- PHP的编程细节
- C/C++编程细节(四)——重要知识点
- C/C++编程细节(五)——重要知识点
- C语言的细节(一)
- C++&C编程相关小细节
- [C#]问号的细节
- C语言的细节!
- C 的各类细节
- socket几种连接方式简介及端口介绍
- 深度强化学习(机器之心)
- Java设计模式--模板方法模式
- java基础知识-集合
- java I/O解析
- C编程的细节(3)
- SQL语法体系
- 求某个正整数范围内的所有素数
- Hibernate对象状态、缓存、懒加载、映射
- Android Studio中代码调试
- 为何我看好社群直播
- JDK安装配置
- jquery datatables api (转)
- jquery datatables api (转)