स्टैनफोर्ड Programming Abstractions पाठ्यक्रम के माध्यम से सुन, वहीं मैं कोड के कुछ टुकड़े कि निम्नलिखित की तरह दिखता है के पार चलो।समारोह
void plot(double start, double end, double (fn)(double)) {
double i;
for (i = start; i <= end; i += 1)
printf("fn(%f) = %f\n", i, fn(i));
}
double plus1(double x) {
return x + 1;
}
int main(void) {
plot(1, 10, plus1);
return 0;
}
मैंने जीसीसी का उपयोग करके अपने सिस्टम पर कोड संकलित किया, फिर जी ++; वे दोनों पूरी तरह से चलाते हैं।
मुझे पता है कि एक समारोह के रूप में void func1(int a)
में एक int i = 2
गुजर जबकि void func2(int *a)
को &i
गुजर केवल समारोह func2
i
का पता दे देंगे कि समारोह के लिए कि i
की एक नई प्रतिलिपि कर देगा।
तो क्या कोई मुझे बता सकता है कि fn
से plot
पास करने के लिए तंत्र क्या है और यह फ़ंक्शन पॉइंटर को पैरामीटर के रूप में पास करने से अलग कैसे है?
आप अपने दूसरे सरणियों के विषय में दावे के लिए एक संदर्भ है? खासकर जब यह सी ++ है? – krlmlr
पूर्व में थोड़ा अंतर है, नहीं है, 'fn' implcitly कार्य करने के लिए एक सूचक है, और बाद' fn' में स्पष्ट रूप से कार्य करने के लिए –
@ user946850 सूचक घोषित किया जाता है: '§8.3.5/5': ... के बाद प्रत्येक पैरामीटर के प्रकार का निर्धारण, प्रकार "टी की सरणी" या "फ़ंक्शन रिटर्निंग टी" के किसी भी पैरामीटर को क्रमशः "टी को पॉइंटर" या "टर्निंग फ़ंक्शन टू टी के लिए सूचक" के रूप में समायोजित किया जाता है। ... – Mankarse