私は理解するのに問題があるこの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が2つの変数を乗算し、gが乗算していることを理解しました。これらは明らかに組み込まれています。関数fooには、関数宣言として宣言された2つのパラメーターがあります-> f(int、int)およびg(int、int)。しかし、fooは2つの引数(sqとpl)で渡されます。2つの引数にも非常に奇妙な値があります-3392と3488、これらの関数の論理アドレスはsqとplですか?それらが整数として渡される場合、fooはどのようにそれらを受け入れますか?fooなので、これらの引数が置かれるべきパラメーターの代わりに関数宣言があります。
ありがとう、編集:かっこいい、みんなありがとう、それは物事を片付けた!