सी

2012-03-31 16 views
5
char **s = &"Is this valid?"; 

पर एक स्ट्रिंग अक्षर के पते को संबोधित करते हुए पता है कि एक स्ट्रिंग अक्षर का पता सी में क्यों संग्रहीत किया जाता है? मुझे पता है कि स्ट्रिंग अक्षरल को .rodata डेटासेंगमेंट में संग्रहीत किया जाता है। हालांकि, उस पते का पता प्राप्त करना समझ में नहीं आता है।सी

यह ध्यान दिया जाना चाहिए कि जीसीसी इसे संकलित करता है और एक निष्पादन निष्पादन योग्य बनाता है।

+2

यह '-Wall -Werror' के साथ नहीं है। –

उत्तर

7

आपका उदाहरण मान्य नहीं है:

char **s = &"Is this valid?"; // Not valid, wrong type 

यह मान्य है:

char (*s)[15] = &"Is this valid?"; // OK 

"Is this valid?" के प्रकार char[15] है। char के सरणी 15 में पॉइंटर का प्रकार char (*)[15] है। तो &"Is this valid?" का प्रकार char (*)[15] है।

स्ट्रिंग अक्षर का प्रकार char[N+1] है जहां N स्ट्रिंग की लंबाई है।

2

&"Is this valid?" का प्रकार char (*)[15] है (यानी char की लंबाई -15 सरणी के लिए एक सूचक)।

आपका कोड अमान्य है, क्योंकि जीसीसी आपको बताएगा कि क्या आप -Wall के साथ संकलित करते हैं।

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

  • कोई संबंधित समस्या नहीं^_^