zoukankan      html  css  js  c++  java
  • 读书笔记--C陷阱与缺陷(三)

    第三章

    1. 指针与数组

    书中强调C中数组注意的两点:

    1)     C语言只有一维数组,但是数组元素可以是任何类型对象,是另外一个数组时就产生了二维数组。数组大小是常数(但GCC实现了变长数组。。)

    2)     一个数组只能做两件事:确定数组大小和获得指向该数组下标为0的元素的指针(数组下标操作其实是指针操作)。

    如:int a[3];

    a除了被用于sizeof的参数时,其他都代表指向数组下标为0的元素的指针。

    sizeof(a)=3*sizeof(int)  (数组大小)

    2. 空指针

    常数0转换的指针就是NULL;但是常数0转换的NULL指针不能解引用(*)。

    即0赋值给指针变量时,不能使用该指针所指向的内存中的内容。

    3. 整数溢出

    当算术运算符的一个操作数是有符号数,另一个是无符号数时,有符号数会被转化为无符号数,不会发生整数溢出。

    所以整数溢出只发生在两个有符号整数之间,溢出的结果也是不确定的!

    书中提供了两种检测程序:

     1     if((unsigned)a + (unsigned)b > INT_MAX)
     2 
     3            complain();
     4 
     5      
     6 
     7       此处的INT_MAX代表最大整数值。在<limits.h>中定义了INT_MAX.
     8 
     9       第二种方法不需要用到无符号类型转换:
    10 
    11       if(a > INT_MAX - b)
    12 
    13            complain();

    第三章其实内容不少,但作者大量篇幅放在了指针与数组和数组中的不对称区间上(数组下标从0开始)。之后抽时间专门写一个对比指针数组、数组指针的文章,将容易搞混的二者区分开。

  • 相关阅读:
    Oracle 12C 在 Oracle Linux 6.5 64Bit 安装手册
    OWI之db file sequential read
    OWI之db file scattered read
    Linux监控脚本
    Java中的空值判断
    Java中的java.math.BigInteger
    Java中用正则表达式找出数字
    Java中的StringBuffer
    JAVA String.format 方法使用介绍
    Java中对整数格式化
  • 原文地址:https://www.cnblogs.com/chenzhefan/p/7487002.html
Copyright © 2011-2022 走看看