सी

2012-03-18 3 views
16

में पॉइंटर का आकार प्राप्त करें sizeof का उपयोग कर सी में पॉइंटर का आकार कैसे प्राप्त करूं? मैं एक पॉइंटर को स्टोर करने के लिए कुछ मेमोरी को मॉलोक करना चाहता हूं (मूल्य को इंगित नहीं किया जा रहा है)।सी

+5

AFAIK, विभिन्न प्रकार के सूचक को समान आकार के लिए गारंटी नहीं है। – SLaks

+0

वास्तव में? क्या आप एक उदाहरण/स्रोत प्रदान कर सकते हैं? मैंने हमेशा मान लिया है कि सभी पॉइंटर्स का आकार समान है क्योंकि वे सभी एक ही पता स्थान के भीतर स्मृति स्थानों का जिक्र कर रहे हैं। – Matt

+4

@ मैट: एक मामूली counterexample एक फ़ंक्शन पॉइंटर है; यह जरूरी नहीं है कि एक ही पता स्थान। यह भी देखें: http://stackoverflow.com/questions/916051/are-there-are-any-platforms-where-pointers-to- अलग-types-have- dififferent-siz। –

उत्तर

27

एक मनमाना प्रकार को देखते हुए (मैं char यहां चुन लिया है, लेकिन यह है कि ठोस उदाहरण के लिए है):

char *p; 

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

sizeof(p) 
sizeof(char *) 

malloc() कैल की ओर अग्रसर एल जैसे:

char **ppc = malloc(sizeof(char *)); 
char **ppc = malloc(sizeof(p)); 
char **ppc = malloc(sizeof(*ppc)); 

पिछले संस्करण ppc परिवर्तन के प्रकार, अभिव्यक्ति अभी भी सही जगह आवंटित करता है, तो उस में कुछ फायदे हैं।

+4

माता-पिता वैकल्पिक। –

+3

@CarlNorum सच है, लेकिन मुझे लगता है कि वे अभिव्यक्ति को थोड़ा सा स्पष्ट करते हैं। यह शैली का मामला है, और ऐसा कुछ नहीं जिसे संपादित किया जाना चाहिए। –

+2

+1 यह पहचानने के लिए कि अंतिम संस्करण को प्राथमिकता दी जानी चाहिए। –

11

इस चाल करना चाहिए:

sizeof(void*) 
1
char *ptr; 
char **ptr2 = malloc(sizeof(ptr)); 

आपके उद्देश्य को प्राप्त करने में सक्षम होना चाहिए। कोई फर्क नहीं पड़ता कि मंच क्या है, इस कोड को काम करना चाहिए।