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

  • 相关阅读:
    1442. Count Triplets That Can Form Two Arrays of Equal XOR
    1441. Build an Array With Stack Operations
    312. Burst Balloons
    367. Valid Perfect Square
    307. Range Sum Query
    1232. Check If It Is a Straight Line
    993. Cousins in Binary Tree
    1436. Destination City
    476. Number Complement
    383. Ransom Note
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6475324.html
Copyright © 2011-2022 走看看