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

    第三章

    3.1 指针与数组

    理解:

    int calendar[12][31];
    /*
    C语言中只有一维数组,calendar是一个一维数组,
    该数组含有12个数组类型的元素,其中每个元素都
    是一个含有31个整型元素的数组
    */
    int (*monthp)[31];
    /*
    *monthp 是一个拥有31个整型元素的数组,mouthp是一个
    指向这样的数组的指针
    */
    
    monthp = calendar;
    /*
    monthp 将指向数组calendar的第一个含有元素(含有31
    个整型元素的数组)
    */
    for(monthp = calendar; monthp <&calendar[12]; monthp++)
    {
        int *dayp;
        for(dayp = *monthp;dayp < &(*monthp)[31];dayp++)
            *dayp = 0;
    }
    
    int month;
    for(month = 0; month<12; month++)
    {
        int day;
        for(day = 0; day < 31; day++)
            *(*(calendar + month) + day) = 0;
    }

    3.2 非数组的指针

    //将字符串s与t拼接起来
    char *r;
    r = malloc(strlen(s) + strlen(t) +1);
    //给r分配足够的空间容纳s,t,不要忘了最后的    ''
    if(!r)//必须考虑无法分配空间的情况,进行处理
    {
        complain();
        exit(1);
    }
    
    strcpy(r,s);
    strcat(r,t);
    
    /*过一段时间后再使用*/
    free(r);    //不要忘记释放动态申请的空间

    3.3 作为参数的数组说明

    考察char amessage[] 与 char *pmessage的区别:

    3.5 空指针并非空字符串

    #define NULL 0

    注意:当常数0被转换为指针使用时,不可以解除引用

    eg:

    if(p == (char*)0) ...          //合法
    if(strcmp(p,(char*)0) == 0)... //不合法

    因为strcmp会访问指针指向的内容。

    3.6 边界计算与不对称边界

    “入界点”:包括在取值范围内;

    “出界点”:不包括在取值范围内。

    int a[10],i;
    for(i=0;i<10;i++)
    a[i] = 0;
    /*
    数组的上界(第一个出界点)是数组元素的个数;
    0是数组下标的第一个入界点(0在数组下标范围内,包括边界点)
    10是数组下标的第一个出界点(10不在数组下标范围内,不包括边界点)
    */

    3.6后续先空过,日后再补充

     补充:(1).逗号表达式:https://blog.csdn.net/DW_css/article/details/58709447

    (2).对于数组结尾之后的下一个元素,取其地址是合法的,但读它的值是未定义的。

    3.9 整数溢出

    假设a,b是两个非负整形变量,则采用下面两种方法可检测是否溢出

    if((unsigned)a + (unsigned)b > INT_MAX)   //强制转换为无符号整数
        cpmplain();
    
    if(a > INT_MAX - b)
        complain();
  • 相关阅读:
    【uva 1442】Cav(算法效率)
    【uva 10600】ACM Contest and Blackout(图论--次小生成树 模版题)
    【bzoj2429】[HAOI2006]聪明的猴子(图论--最小瓶颈生成树 模版题)
    【uva 534】Frogger(图论--最小瓶颈路 模版题)
    【poj 1988】Cube Stacking(图论--带权并查集)
    【uva 12174】Shuffle(算法效率--滑动窗口)
    关于最小生成树 Kruskal 和 Prim 的简述(图论)
    2019牛客暑期多校训练营(第五场) maximum clique 1
    左偏树/可并堆 学习笔记
    树的计数 Prüfer编码与Cayley公式 学习笔记
  • 原文地址:https://www.cnblogs.com/dzy521/p/9395660.html
Copyright © 2011-2022 走看看