zoukankan      html  css  js  c++  java
  • 函数指针的转换 & C的注意点

    再让我们看看<signal.h>中声明的signal函数
    void (*signal(int, void(*)(int)))(int)
    首先,用typedef简化,
    typedef void (*handler_type)(int)
    得,void (*signal(int, handler_type))(int)
    进一步 handler_type signal(int, handler_type); 

    记住:数组名是指向该数组首元素的指针
    如,int a[11];  //那么a的类型为 (int *)
    int *ptr;
    ptr = a;
    但是ptr = &a;是非法的,这里&a的类型为int (*)[],即指向数组的指针,大多数编译期对这种操作,或者视为非法,或者让其等于a

    我们很容易知道calendar[4]表示什么含义:calendar[4]表示calendar数组的第5个元素,是12个有31个元素的数组之一。
    sizeof(calendar[4])结果为31×sizeof(int)

    此例中,calendar名字转换为一个指向数组的指针,其类型为int (*)[31]
    于是p=calendar; 是非法的

    int (*monthp)[31];
    monthp = calendar;//OK

    3.7 求值顺序
    C中只有四个运算符(&&, ||, ? :和,)规定了求值顺序,对于其他运算符不要错误的假设求值顺序,他们求值顺序是未定义的。

    如:
    i = 0;
    while(i < n)
        y[i] = x[i++];

    这里y[i]的地址在i自增前被求值是没有任何保证的

    http://www.cnblogs.com/chio/archive/2007/10/26/938064.html

  • 相关阅读:
    Nubiers to follow
    pp to write
    Reading source code
    build opencv with python support
    add monitor resolution
    Install cv2.so for Anaconda
    axios 上传下载显示进度
    vant 上传图片 图片回显 是base64
    多个时间段 合并
    热部署
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6475324.html
Copyright © 2011-2022 走看看