【发布时间】:2014-08-16 06:54:45
【问题描述】:
我在 C 中玩弄函数指针只是为了学习。我尝试调用 void 函数并将其结果设置为 int。
void function(int x, int y){
printf("%d,%d\n",x,y);
}
int main(){
int (*fptr)(int,int);
fptr = function;
int a = fptr(2,3);
printf("%d\n",a);
return 0;
}
我从中得到的输出是:
2,3
4
玩了一会儿之后,我意识到 main 是在 function() 中打印 printf 语句中的字符数。为什么会这样?这是预期的输出吗?
【问题讨论】:
-
您应该提高编译器的警告级别:ideone.com/3DQN40
-
未定义行为没有“预期输出”。
-
我使用 gcc -Wall 确实给了我一个警告,但我很好奇为什么会发生这种行为
-
你可以得到任何东西。随机的。它可能恰好提供了
printf的返回,因为这是函数返回时累加器中剩下的东西(printf是最后一个调用的东西,它确实有一个返回值)。但不能保证。你不能指望它。那么是预期的吗?不,这可以解释吗?是的。 -
查看通话前后的
a是什么。应该是一样的。
标签: c function-pointers void