पॉइंटर सरणी में वृद्धि ऑपरेटर का उपयोग करते समय मुझे थोड़ा उलझन मिला।पॉइंटर सरणी में वृद्धि ऑपरेटर के साथ क्या गलत है?
कोड 1:
int main(void) {
char *array[] = {"howdy", "mani"};
printf("%s", *(++array));
return 0;
}
संकलन है, जीसीसी एक प्रसिद्ध त्रुटि "वेतन वृद्धि संकार्य के रूप में आवश्यक lvalue" फेंकता है।
लेकिन, जब मैं नीचे दिए गए कोड को संकलित करता हूं तो यह कोई त्रुटि नहीं दिखाता !!! क्यूं कर?
Code2:
int main(int argc, char *argv[]) {
printf("%s",*(++argv));
return 0;
}
दोनों ही मामलों में, मैं सूचक की एक सरणी बढ़ाने की है। तो, यह इस तरह से किया जाना चाहिए।
char *array[] = {"howdy","mani"};
char **pointer = array;
printf("%s",*(++pointer));
लेकिन, क्यों कोड 2 कोई त्रुटि नहीं दिखाता है?
बहुत रोचक! मेरा अनुमान है कि यह 'char ** argv'] के बराबर 'char * argv []' मानता है लेकिन उपयोगकर्ता द्वारा परिभाषित सूचक के साथ सरणी नहीं है .. – Claudiu
एक स्थानीय चर 'char * array [] 'पॉइंटर्स की एक सरणी है । एक फ़ंक्शन तर्क 'char * argv [] 'वास्तव में एक' char ** argv' है। सी 11 मसौदा मानक '6.7.6.3 फंक्शन घोषणाकर्ता (प्रोटोटाइप समेत), सेक्शन 7 पैरामीटर की घोषणा 'प्रकार की सरणी' 'के रूप में' 'टाइप करने के लिए योग्य पॉइंटर' 'में समायोजित की जाएगी। [...]'। – EOF
'char * argv []' 'मुख्य()' decays 'char **' तक पारित किया गया है, न कि '' सरणी [] 'के' 'सरणी 'में आपके प्रत्यक्ष उपयोग के साथ' –