Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

सी . में परिवर्तनीय लंबाई तर्क

कभी-कभी, आप एक ऐसी स्थिति में आ सकते हैं, जब आप एक ऐसा फ़ंक्शन करना चाहते हैं, जो पैरामीटर की पूर्वनिर्धारित संख्या के बजाय तर्कों की चर संख्या, यानी पैरामीटर ले सकता है। सी/सी++ प्रोग्रामिंग भाषा इस स्थिति के लिए एक समाधान प्रदान करती है और आपको एक फ़ंक्शन को परिभाषित करने की अनुमति है जो आपकी आवश्यकता के आधार पर पैरामीटर की परिवर्तनीय संख्या को स्वीकार कर सकता है। निम्न उदाहरण ऐसे फ़ंक्शन की परिभाषा दिखाता है।

int func(int, ... ) {
   .
   .
   .
}
int main() {
   func(1, 2, 3);
   func(1, 2, 3, 4);
}

यह ध्यान दिया जाना चाहिए कि फ़ंक्शन func() इसका अंतिम तर्क दीर्घवृत्त के रूप में है, अर्थात तीन बिंदु (...) और दीर्घवृत्त के ठीक पहले वाला हमेशा एक int होता है जो पारित कुल संख्या परिवर्तनीय तर्कों का प्रतिनिधित्व करेगा। ऐसी कार्यक्षमता का उपयोग करने के लिए, आपको stdarg.h . का उपयोग करना होगा हेडर फ़ाइल जो चर तर्कों की कार्यक्षमता को लागू करने के लिए फ़ंक्शन और मैक्रोज़ प्रदान करती है और दिए गए चरणों का पालन करती है -

  • किसी फ़ंक्शन को उसके अंतिम पैरामीटर के साथ दीर्घवृत्त के रूप में परिभाषित करें और दीर्घवृत्त के ठीक पहले वाला हमेशा एक इंट होता है जो तर्कों की संख्या का प्रतिनिधित्व करेगा।
  • एक va_list बनाएं फ़ंक्शन परिभाषा में चर टाइप करें। इस प्रकार को stdarg.h हेडर फ़ाइल में परिभाषित किया गया है।
  • int का उपयोग करें पैरामीटर और va_start va_list . को प्रारंभ करने के लिए मैक्रो एक तर्क सूची के लिए चर। मैक्रो va_start को stdarg.h हेडर फ़ाइल में परिभाषित किया गया है।
  • va_arg का प्रयोग करें मैक्रो और va_list तर्क सूची में प्रत्येक आइटम तक पहुँचने के लिए चर।
  • मैक्रो का उपयोग करें va_end va_list . को सौंपी गई मेमोरी को साफ करने के लिए परिवर्तनशील।

अब हम उपरोक्त चरणों का पालन करते हैं और एक सरल कार्य लिखते हैं जो मापदंडों की चर संख्या ले सकता है और उनका औसत वापस कर सकता है -

उदाहरण

#include <stdio.h>
#include <stdarg.h>
double average(int num,...) {
   va_list valist;
   double sum = 0.0;
   int i;
   va_start(valist, num); //initialize valist for num number of arguments
   for (i = 0; i < num; i++) {
      //access all the arguments assigned to valist
      sum += va_arg(valist, int);
   }
   va_end(valist); //clean memory reserved for valist
   return sum/num;
}
int main() {
   printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
   printf("Average of 5, 10, 15 = %f", average(3, 5,10,15));
}

आउटपुट

Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000

  1. सी भाषा में कार्य करने के तर्क के रूप में संपूर्ण संरचना को कैसे पारित करें?

    कार्य करने के लिए एक तर्क के रूप में संपूर्ण संरचना को पारित करना - फंक्शन कॉल में स्ट्रक्चर वेरिएबल का नाम तर्क के रूप में दिया जाता है। इसे फ़ंक्शन हेडर में किसी अन्य संरचना चर में एकत्र किया जाता है। नुकसान स्मृति को बर्बाद करते हुए पूरी संरचना की एक प्रति फिर से बनाई जाती है कार्यक्रम

  1. सी और सी ++ में परिवर्तनीय लंबाई सरणी

    यहां हम C++ में वेरिएबल लेंथ एरे के बारे में चर्चा करेंगे। इसका उपयोग करके हम परिवर्तनीय आकार की एक ऑटो सरणी आवंटित कर सकते हैं। सी में, यह सी 99 मानक से परिवर्तनीय आकार के सरणी का समर्थन करता है। निम्न प्रारूप इस अवधारणा का समर्थन करता है - void make_arr(int n){    int array[n]; } int mai

  1. सी प्रोग्राम में 'X' फॉर्मेट में विषम लंबाई की प्रिंट स्ट्रिंग।

    एक स्ट्रिंग प्रोग्राम के साथ दिए गए स्ट्रिंग को X प्रारूप में प्रिंट करना चाहिए। संदर्भ के लिए, नीचे दी गई छवि देखें। यहां, एक चर का उपयोग बाएं दाएं (i) से प्रिंट करने के लिए किया जा सकता है और अन्य चर का उपयोग दाएं से बाएं (जे) प्रिंट करने के लिए किया जा सकता है और हम अन्य चर k ले सकते हैं जो अं