如果我们增加函数指针会发生什么

Gee*_*ran 9 c function-pointers

递增整数指针将按整数大小增加地址.如果我们增加一个函数指针会发生什么?

caf*_*caf 9

就像void *指针和指向不完整类型的指针一样,指向函数的指针不允许算术运算.

例如,关于Additive运算符的C99§6.5.6说:

另外,两个操作数都应具有算术类型,或者一个操作数应是指向对象类型的指针,另一个操作数应具有整数类型.(递增相当于添加1.)

函数类型不是对象类型,因此提供指向函数的指针作为运算+符的操作数是违反此约束的.


作为C语言的扩展,GCC编译器允许对指向函数(和指针void)的指针进行算术运算.它实现了这一点,就好像指向对象的大小为1.请注意,在符合标准的模式中,它会对此类代码发出警告.