Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में malloc() के लिए कास्ट क्यों आवश्यक है लेकिन C में नहीं?


C भाषा में, void पॉइंटर्स को ऑब्जेक्ट पॉइंटर टाइप में अंतर्निहित रूप से परिवर्तित किया जाता है। फंक्शन malloc() C89 मानक में void * लौटाता है। C के पुराने संस्करणों में, malloc() char * लौटाता है। C++ भाषा में, डिफ़ॉल्ट रूप से malloc() int मान लौटाता है। इसलिए, पॉइंटर्स को ऑब्जेक्ट पॉइंटर्स में परिवर्तित करने के लिए एक्सप्लिसिट कास्टिंग का उपयोग किया जाता है।

C भाषा में मेमोरी आवंटित करने का सिंटैक्स निम्नलिखित है।

pointer_name = malloc(size);

यहां,

pointer_name − पॉइंटर को दिया गया कोई भी नाम।

size − बाइट्स में आवंटित मेमोरी का आकार।

C भाषा में malloc() का एक उदाहरण निम्नलिखित है।

उदाहरण

#include <stdio.h> #include <stdlib.h> int main() {    int n = 4, i, *p, s = 0;    p = malloc(n * sizeof(int));    if(p == NULL) {       printf("\nError! memory not allocated.");       exit(0);    }    printf("\nसरणी के एलिमेंट्स दर्ज करें: ");    for(i = 0; i < n; ++i) {       scanf("%d", p + i);       s += *(p + i);    }    printf("\nयोग: %d", s);    return 0; }

आउटपुट

सरणी के एलिमेंट्स दर्ज करें: 2 28 12 32 योग: 74

उपरोक्त C भाषा के उदाहरण में, यदि हम एक्सप्लिसिट कास्टिंग करते हैं, तो यह कोई त्रुटि नहीं दिखाएगा।

C++ भाषा में मेमोरी आवंटित करने का सिंटैक्स निम्नलिखित है।

pointer_name = (cast-type*) malloc(size);

यहां,

pointer_name − पॉइंटर को दिया गया कोई भी नाम।

cast-type − वह डेटा टाइप जिसमें आप malloc() द्वारा आवंटित मेमोरी को कास्ट करना चाहते हैं।

size − बाइट्स में आवंटित मेमोरी का आकार।

C++ भाषा में malloc() का एक उदाहरण निम्नलिखित है।

उदाहरण

#include <iostream> using namespace std; int main() {    int n = 4, i, *p, s = 0;    p = (int *)malloc(n * sizeof(int));    if(p == NULL) {       cout << "\nError! memory not allocated.";       exit(0);    }    cout << "\nसरणी के एलिमेंट्स दर्ज करें: ";    for(i = 0; i < n; ++i) {       cin >> (p + i);       s += *(p + i);    }    cout << "\nयोग: ", s;    return 0; }

आउटपुट

सरणी के एलिमेंट्स दर्ज करें: 28 65 3 8 योग: 104

उपरोक्त C++ भाषा के उदाहरण में, यदि हम एक्सप्लिसिट कास्टिंग नहीं करेंगे, तो प्रोग्राम निम्नलिखित त्रुटि दिखाएगा।

error: invalid conversion from 'void*' to 'int*' [-fpermissive] p = malloc(n * sizeof(int));

  1. C++ प्रोग्राम बाईसेक्शन मेथड के लिए C++ प्रोग्राम बाईसेक्शन मेथड के लिए

    फंक्शन f(x) दिया गया है जिसमें संख्या a और b हैं जहां, f(a) * f(b) > 0 और फंक्शन f(x) a और b के बीच होना चाहिए यानी f(x) = [a, b]। कार्य बाईसेक्शन मेथड का उपयोग करके फंक्शन f(x) में अंतराल a और b के बीच स्थित रूट का मान खोजना है।बाईसेक्शन मेथड क्या है?बाईसेक्शन मेथड का उपयोग फंक्शन f(x) में दिए ग

  1. C++ में पिरामिड के आयतन का प्रोग्राम C++ में पिरामिड के आयतन का प्रोग्राम

    पिरामिड के बेस के प्रकार के आधार पर भुजाएं दी गई हैं, कार्य पिरामिड का आयतन गणना करना है।पिरामिड एक 3-D आकृति है जिसकी बाहरी सतहें त्रिकोणीय हैं जो सामान्य बिंदु पर मिलती हैं जिससे पिरामिड का तीक्ष्ण किनारा बनता है। पिरामिड का आयतन उसके बेस के प्रकार पर निर्भर करता है।पिरामिड के बेस के विभिन्न प्रका

  1. C++ में क्विकसॉर्ट प्रोग्राम C++ में क्विकसॉर्ट प्रोग्राम

    क्विकसॉर्ट क्या है? क्विकसॉर्ट एक सॉर्टिंग तकनीक है जो अनसॉर्टेड सूची (सरणी) को सॉर्ट करने के लिए तुलनाओं का उपयोग करती है। क्विकसॉर्ट को पार्टीशन एक्सचेंज सॉर्ट के नाम से भी जाना जाता है। यह एक स्थिर सॉर्ट नहीं है, क्योंकि समान सॉर्ट आइटम्स का सापेक्ष क्रम संरक्षित नहीं रहता। क्विकसॉर्ट एक सरणी प