2013-08-24 2 views
8

किसी भी चीज़ से जिज्ञासा के मामले में से अधिक। मूल रूप से मैं, पता करने के लिए अगर यह एक पंक्ति में कई समारोह संकेत घोषित करने के लिए संभव है चाहता हूँ की तरह कुछ: समारोह संकेत के साथटाइप किए गए बिना किसी लाइन में एकाधिक फ़ंक्शन पॉइंटर्स कैसे घोषित करते हैं?

int a = 1, b = 2; 

? typedef का सहारा लेने के बिना।

मैंने void (*foo = NULL, *bar = NULL)(int) को आजमाया है। अनजाने में, यह काम नहीं किया।

+0

जबकि मैंने सही ढंग से अनुमान लगाया, मुझे कहना है कि मैंने कभी नहीं देखा (अच्छे कारण के लिए) या इससे पहले की कोशिश की। – chris

+0

obfuscated कोड दुनिया में शक्तिशाली ... बस 6 अंडरस्कोर के रूप में प्रतिनिधित्व करने के लिए कुछ # def की जरूरत है और आप व्यवसाय में हैं! –

उत्तर

10

कोशिश के रूप में:

void (*a)(int), (*b)(int); 

void test(int n) 
{ 
    printf("%d\n", n); 
} 
int main() 
{ 
    a = NULL; 
    a = test; 
    a(1); 
    b = test; 
    b(2); 
    return 0; 
} 

संपादित करें:

:

दूसरा रूप समारोह संकेत की सरणी है

void (*fun[2])(int) = {NULL, NULL}; 

void test(int n) 
{ 
    printf("%d\n",n); 
} 
int main() 
{ 
    fun[0] = NULL; 
    fun[0] = test; 
    fun[0](1); 
    fun[1] = test; 
    fun[1](2); 
} 
+1

हां 'परीक्षण() {} 'के बाद अपनी घोषणाएं लिखें [' शून्य (* ए) (int) = test, (* b) (int) = test; '] (http: // codepad.org/XkYPuwer) –

+0

@GrijeshChauhan मुझे लगता है कि मैंने जिस दूसरे फॉर्म को संपादित किया है, वह उतना ही अधिक है जितना आरडी – vvy

+0

हो सकता है, लेकिन उत्कृष्ट प्रतिक्रिया, उत्कृष्ट उत्तर। –

4
void (*foo)(int) = NULL, (*bar)(int) = NULL; 

या Grijesh के रूप में कहते हैं: इस प्रकार

int main(void) { 
    int a[5], b[55]; 
    int (*aa)[5] = &a, (*bb)[55] = &b; 
    return 0; 
} 
+1

आप सरणी घोषणा के लिए समान सूचक जोड़ना पसंद कर सकते हैं: 'int (* ए) [5], (* बी) [7]; 'यहां एक [कोडपैड लिंक] है (http://codepad.org/ ODgCNXdq) –

+0

कोई भी मैंने ऐरे के लिए कोडपैड लिंक खोलने के लिए नहीं कहा। –

+0

धन्यवाद ग्रिजेश;) –

संबंधित मुद्दे