2010-10-08 19 views

उत्तर

22

क्योंकि सी में केवल "पास-बाय-वैल्यू" पैरामीटर हैं, इसलिए मूल्य को रखने के लिए 'चर' को पास करने के लिए, आपको अपना पता (या परिवर्तक को पॉइंटर) पास करना होगा।

+0

इसके लिए धन्यवाद आदमी। –

5

क्योंकि इसे पढ़ने के लिए पता पता करने की आवश्यकता है। यदि आप एक सूचक के रूप में चर को घोषित करते हैं, तो scanf को & की आवश्यकता नहीं होगी।

1

जब आप मानक इनपुट डिवाइस (आमतौर पर कीबोर्ड) के साथ कुछ इनपुट करते हैं, तो डेटा जो stored कहीं से आता है। आपको स्मृति में कहीं point होना चाहिए ताकि डेटा वहां संग्रहीत किया जा सके। point एक स्मृति स्थान के लिए, आपको उस स्थान के address की आवश्यकता है। इसलिए आपको & ऑपरेटर scanf() के साथ उपयोग करके अपने चर के पते को पास करना होगा।

1

हर किसी ने अच्छी तरह से वर्णन किया है कि sscanf को कहीं भी डालने की आवश्यकता है, लेकिन इसे वापस क्यों नहीं करें? इसे कई चीजों को वापस करना होगा - यह एक से अधिक चर (प्रारूपण द्वारा संचालित) भर सकता है और यह एक int दर्शाता है कि उनमें से कितने चर भर गए हैं।

9

स्कैनफ "ऑपरेटर का पता नहीं लेता (&) "। इसमें सूचक लगता है। अक्सर आउटपुट वैरिएबल के पॉइंटर को स्कैनफ कॉल में ऑपरेटर के पते का उपयोग करके प्राप्त किया जाता है, उदा।

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); 
1

के रूप में मान स्मृति संबोधन में, संग्रहीत करने के लिए (कहाँ?) जा रहा है। इसलिए scanf() के साथ सौदों (&) ऑपरेटर।

संबंधित मुद्दे