का पता लेना चाहिए क्योंकि शीर्षक कहता है, मुझे हमेशा आश्चर्य है कि scanf
को address of
ऑपरेटर (&) लेना चाहिए।क्यों स्कैनफ को ऑपरेटर
उत्तर
क्योंकि सी में केवल "पास-बाय-वैल्यू" पैरामीटर हैं, इसलिए मूल्य को रखने के लिए 'चर' को पास करने के लिए, आपको अपना पता (या परिवर्तक को पॉइंटर) पास करना होगा।
क्योंकि इसे पढ़ने के लिए पता पता करने की आवश्यकता है। यदि आप एक सूचक के रूप में चर को घोषित करते हैं, तो scanf
को &
की आवश्यकता नहीं होगी।
जब आप मानक इनपुट डिवाइस (आमतौर पर कीबोर्ड) के साथ कुछ इनपुट करते हैं, तो डेटा जो stored
कहीं से आता है। आपको स्मृति में कहीं point
होना चाहिए ताकि डेटा वहां संग्रहीत किया जा सके। point
एक स्मृति स्थान के लिए, आपको उस स्थान के address
की आवश्यकता है। इसलिए आपको &
ऑपरेटर scanf()
के साथ उपयोग करके अपने चर के पते को पास करना होगा।
हर किसी ने अच्छी तरह से वर्णन किया है कि sscanf को कहीं भी डालने की आवश्यकता है, लेकिन इसे वापस क्यों नहीं करें? इसे कई चीजों को वापस करना होगा - यह एक से अधिक चर (प्रारूपण द्वारा संचालित) भर सकता है और यह एक int दर्शाता है कि उनमें से कितने चर भर गए हैं।
स्कैनफ "ऑपरेटर का पता नहीं लेता (&) "। इसमें सूचक लगता है। अक्सर आउटपुट वैरिएबल के पॉइंटर को स्कैनफ कॉल में ऑपरेटर के पते का उपयोग करके प्राप्त किया जाता है, उदा।
int i;
scanf("%i", &i);
printf("number is: %d\n", i);
लेकिन ऐसा करने का यह एकमात्र तरीका नहीं है। पीछा कर रहा है बस के रूप में मान्य:
int* iPtr = malloc(sizeof(int));
scanf("%i", iPtr);
printf("number is: %d\n", *iPtr);
तो है:
int i;
int iPtr = &i;
scanf("%i", iPtr);
printf("number is: %d\n", i);
के रूप में मान स्मृति संबोधन में, संग्रहीत करने के लिए (कहाँ?) जा रहा है। इसलिए scanf() के साथ सौदों (&) ऑपरेटर।
इसके लिए धन्यवाद आदमी। –