2012-10-05 28 views
7

सी में/C++, क्या निम्न दो लाइन कोड के बीच अंतर है:"हैलो" और {"हैलो"} के बीच क्या अंतर है?

char *str1="hello"; 
char *str2={"hello"}; 
+1

कोई फर्क नहीं पड़ता। वे दोनों संकलन –

+3

@ BЈовић कम से कम C++ में तोड़ते हैं, लेकिन सी में नहीं (और कौन जानता है * * सी/सी ++ "* है)। –

+0

@ क्रिस्टियन राउ - मुझे पता है कि "सी/सी ++" का अर्थ क्या है, और मुझे संदेह है कि आप भी करते हैं। –

उत्तर

10

वर्ष 2011 की सी मानक, खंड 6.7 .9 प्रारंभ, अनुच्छेद 11: "स्केलर के लिए प्रारंभकर्ता एक एकल अभिव्यक्ति होगी, वैकल्पिक रूप से ब्रेसिज़ में संलग्न ..."

यही है। कोई अर्थपूर्ण अंतर नहीं है; ब्रेसिज़ बस उपस्थित हो सकते हैं या अनुपस्थित हो सकते हैं, अर्थ में कोई बदलाव नहीं।

6

केवल इस मामले में शैली। वे दोनों एक ही चीज़ में परिणाम देते हैं, और वे दोनों खराब रूप हैं। आपको const char * str1="hello"; का उपयोग करना चाहिए था।

+0

{"हैलो"} क्या यह सरणी के रूप में नहीं माना जाता है? जैसा कि हम जानते हैं कि सरणी को परिभाषित करना है जिसे हम {} m में लिखते हैं, बस इसके बारे में भ्रमित करें और क्या होगा अगर char * str2 = {"हैलो", "हाय"}; इस मामले में – Pratik

+0

@ प्रेटिक, सभी स्केलर प्रकार भी '{}' प्रारंभकर्ता स्वीकार करते हैं। –

+0

@JensGustedt कृपया बताएं कि स्केलर प्रकारों की परिभाषा क्या है? – yejinxin

-1

एक सरणी और "स्ट्रिंग" के बीच कोई अंतर नहीं है, क्योंकि स्ट्रिंग वर्णों की एक सरणी है।

2

https://stackoverflow.com/a/3462768/153225 देखें।

ब्रेसिज़ अनावश्यक हैं।

उत्पन्न कोडांतरक "जीसीसी एस" के साथ निम्न कोड के रूप में पुष्टि की है कि वे बिल्कुल वही बात उत्पन्न (प्रत्येक मामले में एक अलग निरंतर के साथ):

#include <iostream> 
using namespace std; 

void test1() { 
    const char *str1="hello1"; 
    cout << str1 << endl; 
} 

void test2() { 
    const char *str2={"hello2"}; 
    cout << str2 << endl; 
} 

int main() { 
    test1(); 
    test2(); 
} 
संबंधित मुद्दे