यह टुकड़ा द्वारा टुकड़ा अलग ले लो ...
myfunction प्रकार शून्य का एक सूचक के लिए सूचक ले जाता है (जो बहुत बहुत मायने रखता है वह किसी पर पॉइंट सकता है)। इसे कुछ इस तरह घोषित किया जा सकता है:
myFunction(void **something);
जो कुछ भी आप पास करते हैं वह उस प्रकार के पास होना चाहिए। तो आप एक सूचक का पता लेते हैं, और इसे एक शून्य सूचक बनाने के लिए (शून्य **) के साथ डालें। (मूल रूप से क्या यह के लिए अंक के बारे में किसी भी विचार की यह अलग करना -। जो संकलक के बारे में अन्यथा कराहना सकता है)
इसका मतलब है कि & चर पता है (& इस करता है) एक सूचक की - तो चर सूचक है। किसका? कौन जाने!
Address:0x601020 Value:1
Address:0x601024 Value:2
:
#include <stdio.h>
int myInteger = 1;
int myOtherInt = 2;
int *myPointer = &myInteger;
myFunction(void **something){
*something = &myOtherInt;
}
main(){
printf("Address:%p Value:%d\n", myPointer, *myPointer);
myFunction((void**)&myPointer);
printf("Address:%p Value:%d\n", myPointer, *myPointer);
}
आप संकलन और इस चलाते हैं, यह उत्पादन की इस तरह देना चाहिए:
यहाँ एक और अधिक पूरा टुकड़ा, यह कैसे एक साथ फिट बैठता है की एक विचार दे रहा है आप देख सकते हैं कि मेरे फ़ंक्शन ने मेरे पॉइंटर के मान को बदल दिया - जो केवल यह कर सकता था क्योंकि यह सूचक का पता पारित कर दिया गया था।
स्रोत
2010-05-31 04:02:03
यह समझ में आता है। लेकिन मैंने कभी अज्ञात डेटाटाइप के एक चर को संभालने के बारे में नहीं सुना। CoCreateInstance ifaceptr को कैसे संभालेगा, अगर यह नहीं जानता कि यह किस प्रकार है। दूसरी बात, मूल डेटाटाइप के आकार के विपरीत मनमान आकार है। – numerical25
CoCreateInstance हमेशा COM ऑब्जेक्ट में पॉइंटर बनाता है, और इसे 'शून्य **' पैरामीटर के माध्यम से देता है। आप इसे 'IID_ISomeInterface' पैरामीटर के रूप में बताते हैं कि आप किस प्रकार टाइप करना चाहते हैं, और आप 'void **' को उस चीज़ में बदलने के लिए टाइपकास्ट का सही उपयोग करने के लिए ज़िम्मेदार हैं जिसका आप उपयोग कर सकते हैं। –
'CoCreateInstance() '" जानता है "आउटपुट पॉइंटर इंटरफ़ेस आईडी के अनुसार क्या होना चाहिए (उदाहरण के लिए' IID_ISomeInterface' है)। इसके अलावा, ** सभी ** पॉइंटर्स एक दिए गए आर्किटेक्चर के लिए समान आकार हैं (उदाहरण के लिए 32-बिट सिस्टम पर सभी पॉइंटर्स 4 बाइट्स हैं, जबकि 64-बिट सिस्टम पर सभी पॉइंटर्स 8 बाइट हैं)। 'शून्य 'प्रकार जैसी कोई चीज़ नहीं है, लेकिन आपके पास' शून्य 'पॉइंटर्स हो सकते हैं। यह मूल रूप से किसी भी प्रकार के सूचक का मतलब है। –