मैं इस सी कोड है कि मैं कर रहा हूँ परेशानी हो रही समझ है:।कुछ "अजीब" सी कोड
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;
}
मैं समझ गया कि च दो चर गुणा किया जाता है और छ गुणा किया जाता है, वे जाहिरा तौर पर में बनाया रहे फंक्शन फू में फ़ंक्शन घोषणा के रूप में घोषित दो पैरामीटर हैं -> एफ (int, int) और g (int, int)। लेकिन फिर foo दो तर्कों के साथ पारित किया जाता है - वर्ग और पीएल। दो तर्कों में भी बहुत अजीब मूल्य हैं - 33 9 2 और 3488, एसक्यू और पीएल कार्यों के उन तार्किक पते हैं? यदि वे हैं और वे पूर्णांक के रूप में पारित होते हैं, तो foo उन्हें कैसे स्वीकार करता है? चूंकि foo ने पैरामीटर के स्थान पर घोषणा की है जहां इन तर्कों पर जाना चाहिए।
धन्यवाद, संपादित करें: अच्छा, बहुत बहुत धन्यवाद, चीजों को मंजूरी दे दी!
क्या यह संकलित है? मुझे नहीं लगता था कि पॉइंटर्स के बिना एक मजेदार बनाने के लिए यह आसान था .. मुझे बेवकूफ़ बनाओ, यह होना चाहिए या आप "बहुत अजीब मूल्य" कैसे देखेंगे –
'% p' के साथ पता मुद्रित करें: printf (" sq =% पी \ n ", वर्ग); – perreal
foo 3 तर्क लेता है - दो फ़ंक्शन (int, int) पहचानकर्ता/पॉइंटर्स और एक पूर्णांक। फू को कॉल दो कार्यों और एक पूर्णांक को गुजरता है। यह हल्का विचित्र है, लेकिन विशेष रूप से विदेशी नहीं है। –