2012-01-05 12 views
27

सरल प्रश्न के लिए खेद है, लेकिन मैं छुट्टी कोर ऑडियो पर एक किताब पढ़ पर हूं, और मेरी सी या मेरे साथ उद्देश्य सी पुस्तक नहीं है ...अजीब उपयोग

क्या हैं घुमावदार ब्रेसिज़ इस चर परिभाषा में कर रहे हैं?

MyRecorder recorder = {0}; 
+16

हो मैं '{0}', *** सार्वभौमिक शून्य प्रारंभकर्ता कॉल करने के लिए पसंद करते हैं। यह हर प्रकार के लिए, यदि आवश्यक हो, तो "काम करता है"! स्याही, युगल, structs, सरणी, पॉइंटर्स, structs के लिए पॉइंटर्स, पॉइंटर्स के सरणी के साथ structs, ..., ... – pmg

+2

pmg: एक उत्तर के रूप में पोस्ट करें! –

+1

@pmg - आपने अपनी टिप्पणी को उत्तर के रूप में क्यों नहीं पोस्ट किया? – vikingosegundo

उत्तर

22

यह मानते हुए कि MyRecorder एक struct है, इस sets every member to their respective representation of zero (0 पूर्णांकों के लिए, NULL संकेत के लिए आदि)।

असल में यह भी तरह int, double, संकेत, सरणियों, नेस्टेड संरचनाओं, ..., सब कुछ आप कल्पना कर सकते अन्य सभी डेटाटाइप्स पर काम करता है (धन्यवाद इस ओर इशारा करते हुए के लिए पीएमजी के लिए!)

अद्यतन: एक उद्धरण ऊपर लिंक वेबसाइट से निकाली गई, C99 की अंतिम मसौदा का हवाला देते हुए:

[6.7.8.21] एक ब्रेस संलग्न सूची में कम initializers से वहाँ तत्वों या कुल के सदस्य हैं देखते हैं, तो [ ...] शेष कुल को उन वस्तुओं के समान रूप से प्रारंभ किया जाएगा जो में स्थिर संग्रहण अवधि है।

+0

संरचना सदस्यों के पास डिफ़ॉल्ट मान नहीं हैं: शून्य स्पष्ट रूप से कहना बेहतर हो सकता है --- "प्रत्येक सदस्य को (सही प्रकार का) शून्य सेट करता है"। – pmg

+0

@pmg: धन्यवाद, मैंने इसे ठीक किया है। –

+0

आह! ठंडा। यह समझ आता है। धन्यवाद। – John

9

इसके C99 मानक के अनुसार 0 को recorder संरचना के सभी सदस्यों आरंभ। ऐसा लगता है कि यह संरचना के हर बिट को 0 बिट्स के साथ शुरू करता है। लेकिन यह हर कंपाइलर के लिए सच नहीं है।

इस उदाहरण कोड देखें,

#include<stdio.h> 

struct s { 
    int i; 
    unsigned long l; 
    double d; 
}; 

int main(){ 
    struct s es = {0}; 
    printf("%d\n", es.i); 
    printf("%lu\n", es.l); 
    printf("%f\n", es.d); 
    return 0; 
} 

यह उत्पादन होता है।

$ ./a.out 
0 
0 
0.000000 
+1

"रिकॉर्डर संरचना के सभी सदस्यों को 0 से शुरू करना" सी 99 मानक के आवेदन में है। "वास्तव में यह संरचना के हर बिट को 0 बिट्स के साथ शुरू करता है।" परंपरागत आर्किटेक्चर पर अभ्यास में केवल सच है, और सी 99 मानक कई बार बताता है कि यह यह नहीं कह रहा है कि यह सच है, और मानक-अनुरूप कंपेलर/लक्ष्य आर्किटेक्चर को इसे सही नहीं करना है। –

+0

@Complicatedseebio धन्यवाद, उत्तर अपडेट किया गया। –

3
+1

स्केलर का भी हो सकता है: 'MyRecorder recorder = {0};' जहां 'MyRecorder'' int 'का उपनाम है उदाहरण के लिए सी – ouah

+1

@उह में' स्ट्रक्चर 'के नाम से जुड़ा हुआ है, मैं कहता हूं * बेहद असंभव * है कि यह एक 'int' या वास्तव में संरचना/संघ के अलावा कुछ भी है। – dasblinkenlight

0

MyRecorder निम्न में से एक हो सकता है और आप वास्तव में, यह संरचना के सभी तत्वों, सिर्फ पहली initliaze नहीं है शून्य

typedef struct _MyRecorder1 { 
    int i; 
    int j; 
    int k; 
}MyRecorder1; 

typedef int MyRecorder2[3]; 
3

साथ कि के सभी तत्वों को प्रारंभ करने का प्रयास कर रहे एक। लेकिन, दूसरों को 0 से स्वचालित रूप से प्रारंभ किया जाता है क्योंकि सी मानक ऐसा करने के लिए कहता है।

यदि आप डालते हैं: MyRecorder recorder = {3};

पहला तत्व 3 हो जाएगा और *** दूसरों वेल 0.

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

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