2010-04-03 20 views
11

संभव डुप्लिकेट:
Returning multiple values from a C++ functionएक फ़ंक्शन एक से अधिक मान लौटा सकता है?

एक समारोह एक मूल्य से अधिक लौट सकते हैं?

संपादित
संदर्भ द्वारा वापसी को छोड़कर।

+2

भाषा अज्ञेयवादी या सी ++? –

+1

यदि आप एक भाषा-अज्ञेय अवलोकन चाहते हैं, तो यहां एक प्रश्न है: http://stackoverflow.com/questions/1468375/how-do-you-return-two-values-from-a-single-method –

+0

आप वापस आ सकते हैं एक सरणी के रूप में या आप एक सरणी को संदर्भ के रूप में पास कर सकते हैं और इन मानों को उस सरणी में संग्रहीत कर सकते हैं। – pocoa

उत्तर

11

नहीं, लेकिन आपको वापस कर सकते हैं एक pair या boost::tuple जो एक से अधिक मान हो सकते हैं।

इसके अलावा, आप इस तरह से अधिक मान वापस जाने के लिए संदर्भ का उपयोग कर सकते हैं:

int result_sum; 
int result_difference; 
MyFunction(1, 2, result_sum, result_difference); 

होगन बताते हैं के रूप में, तकनीकी रूप से यह नहीं है:

void MyFunction(int a, int b, int& sum, int& difference); 

आप इस तरह इस समारोह कहेंगे एकाधिक चर लौट रहा है, हालांकि यह एक अच्छा विकल्प है।

+7

नाइट पिक: "इसके अतिरिक्त, आप इस तरह के कई मान वापस कर सकते हैं:" होना चाहिए "इसके अतिरिक्त, आप इस तरह के कई मानों को संशोधित कर सकते हैं:"। आप विश्व स्तर पर स्कॉप्ड चर भी संशोधित कर सकते हैं। – Hogan

14

हां - क्या आपका फ़ंक्शन एक संरचना लौटाता है। या संदर्भ मानकों के माध्यम से मूल्य वापस।

struct A { 
    int x, y; 
    A(int a, int y) : x(x), y(y) {} 
}; 

A myfun() { 
    return A(0, 42); // return two values 
} 

या:

void myfun(int & a, int & b) { 
    a = 0; 
    b = 42; 
} 
+4

हालांकि तकनीकी रूप से यह अभी भी सी –

+0

में एक मान है, क्या यह सवाल का जवाब दे रहा है, "क्या कोई फ़ंक्शन एक से अधिक मान संशोधित कर सकता है?" यदि आप पूरा करना चाहते हैं तो यह ग्लोबल्स को भी संशोधित कर सकता है। – Hogan

+0

लेकिन अभी भी केवल एक मान (उसका पता) भेज दिया गया है और हम इसे किसी अन्य ऑब्जेक्ट में कॉपी करके पूरे ऑब्जेक्ट तक पहुंच सकते हैं। मैं विशेष रूप से जानना चाहता हूं कि हम एक साथ दो मान असाइन कर सकते हैं। –

1

एक समारोह निर्धारित तरीकों से मान सकते हैं: वाया किसी भी प्रकार

  • के रिटर्न मान

    • एक सूचक
    • वाया एक संदर्भ
    • वाया एक वैश्विक चर सेटिंग के माध्यम से (अत्यधिक की सिफारिश नहीं)

    यदि आपको स्वयं निहित वापसी मूल्य की आवश्यकता है, तो आप आमतौर पर एक स्ट्रक्चर में आवश्यक प्रकारों को लपेटेंगे और मूल्य के आधार पर उस संरचना का एक वस्तु वापस करें। यदि आप स्थानीय प्रतिलिपि रखने से बचना चाहते हैं तो आप संशोधित करने के लिए संदर्भ पैरामीटर में पास होंगे।

  • 18

    boost::tuple लाइब्रेरी में, a function called tie है जो tuple पर जानकारी प्राप्त करने की प्रक्रिया को सरल बनाता है। यदि आपके पास कोई ऐसा फ़ंक्शन था जो दो double एस के लौटाता था और उन्हें दो स्थानीय चर x और y में लोड करना चाहता था, तो आप अपने फ़ंक्शन का रिटर्न मान boost::tie(x, y) पर असाइन कर सकते थे।

    उदाहरण:

    #include <math.h> 
    #include <iostream> 
    #include <boost/tuple/tuple.hpp> 
    
    const double PI = 3.14159265; 
    
    boost::tuple<double, double> polar_to_rectangular(double radius, double angle) 
    { 
        return boost::make_tuple(radius * cos(angle), radius * sin(angle)); 
    } 
    
    int main() 
    { 
        double x; 
        double y; 
    
        boost::tie(x, y) = polar_to_rectangular(4, (45 * PI)/180); 
        std::cout << "x == " << x << ", y == " << y << std::endl; 
    
        return 0; 
    } 
    
    +4

    ठंडा, पता नहीं था कि –

    -4
    main() 
    { 
        int a=10,b=20; 
        int *c; 
        c=aa(a,b); 
        printf("%d %d",*c,*c+1); 
    } 
    
    void aa(int a,int b) 
    { 
        int c1[2]; 
        c1[0]=b+a; 
        c1[1]=a-b; 
        return(c1); 
    } 
    

    यहाँ, सी 1 के पते वापसी हो जाएगा। तो यह मुख्य सी cariable में स्टोर करेगा।हम पॉइंटर के माध्यम से दोनों चर को पुनः प्राप्त कर सकते हैं,

    +2

    अपरिभाषित व्यवहार की ओर ले जाता है। 'सी 1' का जीवनकाल समाप्त होता है जब 'aa' छोड़ा जाता है, इसलिए' c' किसी मृत वस्तु पर इंगित होता है। इसे एक्सेस करने से अनिर्धारित व्यवहार होता है। – GManNickG

    +2

    अपरिभाषित व्यवहार। –

    0

    संरचना का उपयोग करें और विभिन्न डेटा प्रकार के साथ एकाधिक मान वापस करें।

    1
    #include<stdio.h> 
    #include<stdlib.h> 
    #include<string.h> 
    
    typedef struct 
    { 
        int a; 
        int b; 
    }Mystruct; 
    
    Mystruct myfun(); 
    
    int main() 
    { 
        char name[30]; 
        Mystruct ms2; 
        ms2 = myfun(); 
        printf("val1: %d val2: %d",ms2.a,ms2.b); 
        return 0; 
    } 
    
    Mystruct myfun() 
    { 
        int a,b; 
        Mystruct ms; 
    
        a = 10; 
        b = 20; 
        ms.a=a; 
        ms.b=b; 
    
        return(ms); 
    } 
    
    संबंधित मुद्दे