c++ - "Int*ptr=int()" मान प्रारंभिक कैसे अवैध नहीं है?




visual-c++ pointers (4)

निम्नलिखित कोड ( यहां से लिया गया ):

int* ptr = int();

विजुअल सी ++ में संकलित करता है और पॉइंटर को मूल्य-प्रारंभ करता है।

वो कैसे संभव है? मेरा मतलब है int() प्रकार int की वस्तु उत्पन्न करता है और मैं एक सूचक को एक int असाइन नहीं कर सकता।

उपरोक्त कोड अवैध नहीं है?


अच्छा int एक वस्तु नहीं है।

मैं यहां क्या हो रहा हूं, यह है कि आप Int * द्वारा निर्धारित कुछ स्मृति पते को इंगित करने के लिए int * कह रहे हैं

इसलिए अगर int () 0 बनाता है, int * स्मृति पता 0 को इंगित करेगा


अभिव्यक्ति int() निरंतर डिफ़ॉल्ट-प्रारंभिक पूर्णांक का मूल्यांकन करती है, जो मान 0 है। वह मान विशेष है: इसका उपयोग नल राज्य में सूचक को प्रारंभ करने के लिए किया जाता है।


क्योंकि int() 0 उत्पन्न करता है, जो NULL साथ अंतर-परिवर्तनीय NULLNULL खुद को 0 रूप में परिभाषित किया गया है, सी के NULL विपरीत जो (void *) 0

ध्यान दें कि यह एक त्रुटि होगी:

int* ptr = int(5);

और यह अभी भी काम करेगा:

int* ptr = int(0);

0 एक विशेष निरंतर मूल्य है और इस तरह इसे एक सूचक मूल्य के रूप में माना जा सकता है। निरंतर अभिव्यक्ति जो 0 उत्पन्न करती हैं, जैसे कि 1 - 1 को नल-पॉइंटर स्थिरांक के रूप में भी अनुमति दी जाती है।


int() 0 के मान के साथ निरंतर अभिव्यक्ति है, इसलिए यह एक शून्य सूचक स्थिरांक का एक वैध तरीका है। आखिरकार, यह int *ptr = NULL; कहने का थोड़ा अलग तरीका int *ptr = NULL;







built-in-types