2012-01-27 12 views
5

मुझे निम्नलिखित कोड से परिणाम 6, और फिर 8 क्यों प्राप्त होते हैं? मैंने पदों के माध्यम से खोज की लेकिन मेरे प्रश्न का सटीक मिलान नहीं मिला। धन्यवाद।एक वर्ण सरणी के लिए आकार

#include <stdio.h> 

void getSize(const char *str) 
{ 
     printf("%d\n", sizeof(str)/sizeof(char)); 
} 

int main() 
{ 
     char str[]="hello"; 
     printf("%d\n", sizeof(str)/sizeof(char)); 
     getSize(str); 
} 
+0

आपको शायद यह पता है, लेकिन बस मामले में - 'स्ट्रेलन (str)' का उपयोग करें यदि आप जो चाहते थे वह स्ट्रिंग की लंबाई थी। – mark4o

+0

संभावित डुप्लिकेट [आकार कैसे प्राप्त करें (एक सरणी को इंगित करने वाला पॉइंटर)] (http://stackoverflow.com/questions/492384/how-to-find-the-sizeof-a-pointer-pointing-to- ए-सरणी) –

+0

@ mark4o हाँ मुझे पता था, लेकिन उपरोक्त को समझना चाहते हैं। –

उत्तर

7

अपने getSize() समारोह में,: एक सूचक (64-बिट प्लेटफॉर्म पर) है 8 बाइट्स, तो (है कि sizeof(char) = 1 दिया)। इसलिए sizeof(str)पॉइंटर का आकार देता है। (जो इस मामले में 8 बाइट्स है)

आपके main() फ़ंक्शन में, str एक सरणी है। इसलिए sizeof(str)सरणी का आकार देता है।

यह सरणी और पॉइंटर्स के बीच सूक्ष्म अंतरों में से एक है।

+0

मैं इसे वास्तव में सूक्ष्म नहीं कहूंगा: * अरे दोस्तों जब मैं विभिन्न प्रकारों पर 'आकार' कहता हूं तो मुझे अलग-अलग परिणाम मिलते हैं?! * –

+0

@ todda.speot.is अगर ओपी ने 'शून्य प्राप्त' लिखा था तो यह सूक्ष्म होता। कॉन्स चार स्ट्र []) '। –

+0

@Complicatedseebio यह सरणी/पॉइंटर्स के बीच सूक्ष्म मतभेदों से निकलने शुरू हो रहा है और सरणी/सरणी के बीच सूक्ष्म अंतर की ओर बढ़ रहा है ... –

2

विभिन्न प्रकार, विभिन्न आकार।

main, strchar[6] है। getSizestr में const char * है। str एक सूचक है

6/1 = 6 
8/1 = 8 
+0

मैं देखता हूं। मुझे लगता है कि मुझे पता था कि एक समारोह में एक सरणी पारित करते समय, सरणी को पहले तत्व को इंगित करने वाले सूचक में परिवर्तित किया जाता है। लेकिन मुझे बस यह अजीब लगा कि इसका आकार 8 बाइट क्यों है। स्पष्ट रूप से मैं भूल गया कि सिस्टम एक 64-बिट है। –

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