递增整数指针将按整数大小增加地址。如果我们增加一个函数指针会发生什么?
user1731828
问问题
1786 次
2 回答
8
就像void *
指针和指向不完整类型的指针一样,在指向函数的指针上不允许进行算术运算。
例如,关于加法运算符的 C99 §6.5.6 说:
另外,两个操作数都应具有算术类型,或者一个操作数应是指向对象类型的指针,而另一个应具有整数类型。(递增相当于加 1。)
函数类型不是对象类型,因此提供指向函数的指针作为运算符的操作数+
违反了此约束。
作为 C 语言的扩展,GCC 编译器允许对指向函数的指针(和指向 的指针void
)进行算术运算。它实现这一点,就好像指向对象的大小为 1。请注意,在符合标准的模式下,它会针对此类代码发出警告。
于 2012-10-31T06:10:27.293 回答
3
在 void 和函数指针上不允许指针算术。
然而,许多编译器通过编译器扩展支持指针算术运算。这是通过将 void 或函数的大小视为 1 来完成的。
如果您使用 gcc,则使用以下标志强制编译器提供诊断:
-Wpointer-arith
于 2012-10-31T06:20:52.807 回答