2010-05-28 13 views
10

असली सरल सवाल। मेरा आदमी-पृष्ठ के अनुसार, इन दोनों भी ऐसा ही होगा:समय (एनयूएलएल); बनाम समय (और कुछ);

time_t t; 
time(&t); 

printf("Time: %ld", t); 

...

printf("Time: %ld", time(NULL)); 

तो, वास्तव में क्या-समय पर एक सूचक पास करने का लाभ है? यदि time() कोई घड़ी उपलब्ध होने के कारण विफल हो जाएगा, तो मेरी राय में दो प्रकारों में से कोई भी लाभ नहीं होगा।

उत्तर

8

लाभ यह होगा कि आपको 'समय' कॉल करने के बाद डेटा को किसी अन्य संरचना में कॉपी करने की आवश्यकता नहीं है।

यदि आप उदा। किसी अन्य एप्लिकेशन/सर्वर को भेजने के लिए डेटा का बफर तैयार करना आपको डेटा को कॉपी करना होगा, जो अतिरिक्त ओवरहेड है। अपनी डेटा संरचना में एक पॉइंटर पास करके आप इसे एक शॉट में सही जगह पर सही रख सकते हैं।

बेशक यदि डेटा के लिए आपका एकमात्र उपयोग इसे टेक्स्ट प्रिंटफ जैसे किसी अन्य प्रारूप में परिवर्तित करना है, तो इसे न्यूल के साथ कॉल करना और आपके पहले उदाहरण द्वारा आवश्यक अतिरिक्त संग्रहण को सहेजना अधिक कुशल है।

आखिरकार समय फ़ंक्शन इसके आंतरिक समय संरचना के संग्रहण के लिए एक ही स्थान का उपयोग करता है, इसलिए पहली विधि अधिक थ्रेड-सुरक्षित होगी, हालांकि अगर मैं वास्तव में 'समय' वास्तव में थ्रेड सुरक्षित हूं तो मुझे अपने सिर के शीर्ष की याद नहीं आती है।

0

आदमी पृष्ठ से:

टाइम_टी समय (टाइम_टी * टी);

"यदि टी गैर-नल है, तो वापसी मूल्य टी द्वारा इंगित स्मृति में भी संग्रहीत किया जाएगा।"

मुझे लगता है कि यह सिर्फ विरासत सामग्री है।

+1

ओपी इसे प्राप्त करता है। वह पूछ रहा है _why_ आप एक गैर-पूर्ण सूचक पास करना चाहते हैं। –

1

अधिकांश उदाहरण मैंने NULL पास किया है। मुझे भी एक सार्थक सूचक को पारित करने में कोई फायदा नहीं होता है, खासकर time_t से हमेशा एक अभिन्न प्रकार है।

0

टाइम_टी मान के सूचक को फ़ंक्शन तर्क के रूप में पारित किया गया - आईएमओ जो सिंटैक्स मौजूद है, इसका एक कारण है।

time_t *foo(time_t *dest) 
{ 
    time(dest); 
    /* do something with dest here */ 
    return dest; 
} 
संबंधित मुद्दे