निम्नलिखित घोषणाओं है:प्रश्न समारोह सूचक सी में बारे में
void qsort(void *lineptr[], int left, int right, int (*comp)(void *, void *));
int numcmp(char *, char *);
int strcmp(char *s, char *t);
फिर
, कहीं कार्यक्रम में वहाँ निम्नलिखित कॉल है:
qsort((void**) lineptr, 0, nlines-1,
(int (*)(void*,void*))(numeric ? numcmp : strcmp));
(पहले तीन तर्कों पर ध्यान न दें और numeric
) ।
मैं पूछता हूँ यह है कि क्या:
(int (*)(void*,void*))(numeric ? numcmp : strcmp)
मैं समझता हूँ कि qsort
के रूप में यह 4 तर्क है, लेकिन कैसे क्या संतुष्ट ऊपर लिखा है कि "समारोह है कि दो void
संकेत हो जाता है और एक int
रिटर्न के लिए सूचक" एक उम्मीद कर रही है? ऐसा लगता है कि मुझे कुछ प्रकार की कास्ट पसंद है क्योंकि यह दो कोष्ठक से बना है, लेकिन यह एक बहुत ही अजीब कलाकार होगा। क्योंकि यह एक फ़ंक्शन लेता है और यह फ़ंक्शन "फ़ंक्शन करने के लिए पॉइंटर बनाता है जो दो void
पॉइंटर्स प्राप्त करता है और int
देता है"। जो अर्थहीन है।
(मैंने नियम का पालन किया है कि एक प्रकार type
एक चर वैरिएबल को उस प्रकार के चर को बढ़ावा देने से पहले)।
तो मुझे लगता है कि मुझे यह गलत लगता है, शायद कोई मुझे बता सकता है कि इसे कैसे पढ़ा जाए, आदेश क्या है?
यह अर्थहीन क्यों है? यह मेरे लिए ठीक लग रहा है। – cadrian
क्योंकि आप कोई फ़ंक्शन लेते हैं और इसे बेकार बनाते हैं। यह सिर्फ एक सूचक बन जाता है। यह अब एक समारोह नहीं है। इसके अलावा, qsort को क्या पारित किया जा रहा है? केवल एक सूचक जो फ़ंक्शन पर इंगित करता है लेकिन किसी ने कभी भी यह कार्य करने के लिए नहीं बताया है। मुझे यह भी लगता है कि एक पॉइंटर को एक पॉइंटर को बदलना –
एक फंक्शन के लिए एक पॉइंटर एक * फ़ंक्शन पॉइंटर * है ... जो फ़ंक्शन के रूप में पूरी तरह उपयोग करने योग्य है, धन्यवाद ... – Varkhan