मैं फ़ंक्शन fn में obj-> val1 द्वारा इंगित स्मृति की कॉन्स्ट-नेस को कैसे बल दूं?सी/सी ++: कॉन्स्ट स्ट्रक्चर के भीतर पॉइंटर्स
#include <iostream>
struct foo {
int* val1;
int* val2;
int* val3;
};
void fn(const foo* obj)
{
// I don't want to be able to change the integer that val1 points to
//obj->val1 = new int[20]; // I can't change the pointer,
*(obj->val1) = 20; // But I can change the memory it points to...
}
int main(int argc, char* argv[])
{
// I need to be able to set foo and pass its value in as const into a function
foo stoben;
stoben.val1 = new int;
*(stoben.val1) = 0;
std::cout << *(stoben.val1) << std::endl; // Output is "0"
fn(&stoben);
std::cout << *(stoben.val1) << std::endl; // Output is "20"
delete stoben.val1;
return 0;
}
यहां कोड बहुत आत्म व्याख्यात्मक है। मुझे एक गैर-कॉन्स्ट ऑब्जेक्ट बनाने और डेटा के साथ भरने में सक्षम होना चाहिए, लेकिन फिर इसे उस फ़ंक्शन पर पास करें जहां यह डेटा संशोधित नहीं किया जा सकता है। मैं इसके बारे में कैसे जा सकता हूं?
मुझे पता है कि मैं सिर्फ एक कॉन्स इंट पॉइंटर में पास कर सकता हूं, लेकिन सैद्धांतिक रूप से, इस वर्ग में कई अन्य पॉइंटर्स हैं जिन्हें मुझे "एफएन" में भी आवश्यकता होगी।
धन्यवाद,
Griff
अहह। मैं भूल जाता हूं कि सी ++ में structs में विधियों और सदस्य चर हो सकते हैं। इससे मेरी समस्या हल हो जाएगी, यद्यपि केवल गिगल्स के लिए, क्या सी में ऐसा करना संभव है? – Griffin
@ ग्रिफिन: यदि आप वास्तव में यह सुनिश्चित करना चाहते थे कि आप शायद इसे अलग से पास कर दें। –
@ ग्रिफिन: हाँ। मेरा उत्तर देखें, जो सी और सी ++ दोनों के लिए मान्य है। –