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

时间:2012-10-31 05:57:23

标签: c function-pointers

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

2 个答案:

答案 0 :(得分:9)

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

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

  

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

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


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

答案 1 :(得分:4)

void和函数指针不允许使用指针arithematic 然而,许多编译器通过编译器扩展支持指针arithematic。 这是通过将空白或函数的大小视为1来完成的。

如果您正在使用gcc,请使用以下标志强制编译器提供诊断:

-Wpointer-arith