我有这个 C 代码,但我无法理解:
int foo(int f(int,int), int g(int,int), int x) {
int y = g(x,x);
return f(y,y);
}
int sq(int x, int y) {
if (x == 1) { return y; }
return pl(y, sq(x-1, y));
}
int pl(int x, int y) {
if (x == 0) { return y; }
return pl(x-1, y+1);
}
int main (int argc, const char * argv[])
{
printf("sq = %d\n", sq);
printf("output=%d\n", foo(sq, pl, 1));
return 0;
}
我知道 f 是两个变量相乘,而 g 是相乘,它们显然是内置的。函数 foo 有两个参数声明为函数声明-> f(int, int) 和 g(int, int)。但是随后 foo 带有两个参数 - sq 和 pl。这两个参数也有很奇怪的值——3392 和 3488,是函数 sq 和 pl 的逻辑地址吗?如果它们是并且它们作为整数传递,那么 foo 如何接受它们?由于 foo, 有函数声明来代替这些参数应该去的参数。
谢谢,编辑:很酷,非常感谢你们,这清除了一切!