मुझे एक पॉइंटर का मान प्रिंट करना था:

int *p = 0;
printf("%d", *p); 

उपरोक्त कोड एक अपवाद फेंकता है।

इसलिए मैंने printf("%d", p) की कोशिश की और वह काम कर गया।

यह केवल * के बिना ही क्यों काम करता था?

1
G0rdo1 25 मार्च 2020, 10:51

1 उत्तर

सबसे बढ़िया उत्तर

जब आप पॉइंटर p (*p के रूप में) को डीरेफरेंस करते हैं तो आप एक नल पॉइंटर को डिफरेंस करते हैं (आप उस मान को प्राप्त करने का प्रयास करते हैं जहां p इंगित कर रहा है, लेकिन यह वास्तव में कहीं भी इंगित नहीं कर रहा है)। इससे अपरिभाषित व्यवहार हो जाता है और अक्सर दुर्घटना हो जाती है।

जब आप सादे p का उपयोग करते हैं, तो आप पॉइंटर वेरिएबल की सामग्री को ही प्रिंट करते हैं, न कि वह मान जहां वह इंगित करता है। लेकिन वह भी अपरिभाषित व्यवहार की ओर ले जाता है, क्योंकि %d प्रारूप एक int मान प्रिंट करना है, न कि int * मान। बेमेल प्रारूप विनिर्देशक और तर्क प्रकार UB है।

5
Some programmer dude 25 मार्च 2020, 07:54