这是我的代码。似乎f [i]在任何i值都返回1。
int f(int x) { return 203; }
int main(){
cout<<f[0]<<' '<<f[21]<<' 'f[-1];//= 1 1 1
return 0;
}
使用编译器引发的警告,我知道这是一个指针,但它的行为似乎不像一个指针。
f[-2](1) // = 203, good
f[32](1) // Process returned -1073741571 (0xC00000FD) execution time : 6.731 s
编辑:我使用带有c ++ 14标志的g ++编译器。
答案 0 :(得分:2)
这是GCC扩展名:
6.23 Arithmetic on
void
- and Function-Pointers在GNU C中,指向void的指针和指向函数的指针支持加法和减法运算。这可以通过将
void
或函数的大小视为1来完成。其结果是
sizeof
和函数类型上也允许void
,并返回1。
指向不存在的函数的结果指针(如果被调用)很可能崩溃或产生奇怪的结果。
似乎
f[i]
返回1
的值为i
。
这是cout
的众所周知的行为。它将所有非零函数指针打印为1
,因为它们没有适当的operator<<
重载,并且选择operator<<(bool)
作为最合适的重载。
({f[i]
是一个函数而不是函数指针,但在这种情况下会衰减为指针。)