2011-12-11 13 views
5

क्या ऐरे की लंबाई प्राप्त करने का कोई तरीका है जब मुझे केवल ऐरे को इंगित करने वाला सूचक पता है?एक सूचक का उपयोग कर एक ऐरे की लंबाई प्राप्त करें

निम्न उदाहरण

int testInt[3]; 
testInt[0] = 0; 
testInt[1] = 1; 
testInt[2] = 1; 

int* point; 
point = testInt; 

Serial.println(sizeof(testInt)/sizeof(int)); // returns 3 
Serial.println(sizeof(point)/sizeof(int)); // returns 1 

देखें (इस Arduino कोड से एक snipplet है - मैं माफी चाहता हूँ, मैं "संवाद" नहीं करते असली सी)।

उत्तर

11

आसान उत्तर नहीं है, आप नहीं कर सकते हैं। आप संभवतः स्मृति में एक चर रखना चाहते हैं जो सरणी में वस्तुओं की मात्रा को संग्रहीत करता है।

और कोई आसान जवाब नहीं है। सरणी की लंबाई निर्धारित करने का एक तरीका है, लेकिन इसके लिए आपको किसी अन्य तत्व के साथ सरणी के अंत को चिह्नित करना होगा, जैसे कि -1। फिर बस इसके माध्यम से लूप और इस तत्व को खोजें। इस तत्व की स्थिति लंबाई है। हालांकि, यह आपके वर्तमान कोड के साथ काम नहीं करेगा।

उपर्युक्त में से कोई एक चुनें।

+3

+1 यह उन चीजों में से एक है जो सी बेकार है। :) –

+1

@WTP सी ++ के लिए समान है, सिवाय इसके कि 'std :: vector' आपके लिए इसका ख्याल रखेगा। –

1

आप और नहीं कर सकते हैं आप सरणी लंबाई अनुमान सूचक अंकगणित

3
  • का उपयोग कर सी में अगर ++ उपयोग वेक्टर वर्ग यदि आप एक सरणी चर है आप एक सरणी की लंबाई का अनुमान लगा सकते प्रयास नहीं करना चाहिए।
  • यदि आपके पास सिर्फ एक सूचक है तो आप सरणी की लंबाई का अनुमान नहीं लगा सकते हैं।
1

आप आप पूरे सरणी इंगित कर सकते हैं, तो और नहीं की तरह पहला तत्व को इंगित:

int testInt[3]; 
int (*point)[3]; 
point = testInt; 

printf("number elements: %lu", (unsigned long)(sizeof*point/sizeof**point)); 
printf("whole array size: %lu", (unsigned long)(sizeof*point)); 
+0

सिवाय इसके कि आपको उस स्थिति में पहले से ही पता होना चाहिए, जो गिनती को बेकार कर देता है। –

4

इसके अलावा एक Arduino परियोजना यहां क्या कर ... इंटरनेट पर हर कोई यह नामुमकिन है जोर देते हैं लगता है चार सूचक के लिए इस ... करने के लिए और अभी तक किताब में सबसे पुराना चाल ठीक अशक्त के साथ समाप्त सरणियों काम करने के लिए लगता है ...

उदाहरण:

int getSize(char* ch){ 
     int tmp=0; 
     while (*ch) { 
     *ch++; 
     tmp++; 
     }return tmp;} 

जादू ...

+1

एक चार सरणी के लिए, आप आसानी से strlen() का उपयोग कर अपना आकार प्राप्त कर सकते हैं क्योंकि यह ऊपर दिखाए गए अनुसार एक ही विधि का उपयोग करता है। लेकिन एक संख्यात्मक चार सरणी के लिए, बस आप नहीं कर सकते हैं। –