函数指针的转换 & C的注意点

Posted 笨鸟居士的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数指针的转换 & 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

 

以上是关于函数指针的转换 & C的注意点的主要内容,如果未能解决你的问题,请参考以下文章

函数中的 C 指针赋值

C 指针&&函数

C 指针&&函数

在C语言中能否直接给指针指向的数据赋值?为啥?

在函数指针返回值中转换对指针的引用

C语言中函数指针*p **p 和数组不是很明白,可以解释下麽?