2012-01-18 17 views
6

क्या दोनों पॉइंटर स्टेटमेंट समान हैं?फ़ंक्शन में पॉइंटर सिंटैक्स घोषित करना

void reverse(const char * const sPtr){ 


} 

और

void reverse(const char const *sPtr){ 


} 
+0

आप चाहते हो सकता है const डाल करने के लिए है कुछ 'टाइपपीफ' का उपयोग करने के लिए। –

+0

@ डैन या नहीं। ऑब्जेक्ट पॉइंटर प्रकारों के लिए 'typedef' का उपयोग करना निराश है। – ouah

+0

@ouah: जो इसे हतोत्साहित करता है, और आप किसी ऐसे व्यक्ति द्वारा निराश क्यों होंगे जो जाहिर है कि उसके बारे में कोई बात नहीं है? –

उत्तर

5

सं

const char const *sPtr const char *sPtr के बराबर है।

const char *sPtr पैरामीटर sPtrconst char पर एक सूचक है।

const char * const sPtr पॉइंटर const char पर है।

ध्यान दें कि यह C99 और सी 11 में बराबर है:

(C99, 6.7.3p4) "एक ही क्वालीफायर एक ही विनिर्देशक-क्वालीफायर-सूची में एक से अधिक बार दिखाई देता है, या तो सीधे या एक के माध्यम से या अधिक typedefs, व्यवहार वही है जैसे यह केवल एक बार दिखाई दिया। "

लेकिन C89 जहां const char const *sPtr एक बाधा उल्लंघन है में नहीं:

(C90, 6.5.3) "एक ही प्रकार के क्वालीफायर एक ही विनिर्देशक सूची या क्वालीफायर सूची में एक से अधिक बार दिखाई नहीं होगा, या तो सीधे या एक या अधिक टाइपपीफ के माध्यम से। "

+0

ठीक है। धन्यवाद। यह समझ आता है। – runners3431

1

सं

पहले const char करने के लिए एक const सूचक है।

दूसरा const char पर पॉइंटर है।

const बाएं बाएं, या दाएं बाईं ओर कुछ भी नहीं है।

+0

उस बोली के लिए धन्यवाद। – runners3431

2

आप क्या हासिल करने की कोशिश कर रहे हैं?

आप एक स्थिरांक सूचक चाहते हैं तो आप *

int * const a; 

के बाद const डाल करने के लिए आप एक सूचक चाहते हैं const के लिए है इससे पहले कि आप *

const int *a; 
+0

स्ट्रिंग लेने के लिए जा रहे हैं और इसे printf कथन के साथ उलट दें। – runners3431

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