कुछ सी साक्षात्कार प्रश्नों के माध्यम से जा रहे हैं, मैंने एक प्रश्न पाया है "साइलोऑफ़ ऑपरेटर का उपयोग किए बिना सी में एक सरणी का आकार कैसे ढूंढें?", निम्न समाधान के साथ। यह काम करता है, लेकिन मुझे समझ नहीं आता कि क्यों।
#include <stdio.h>
int main() {
int a[] = {100, 200, 300, 400, 500};
int size = 0;
size = *(&a + 1) - a;
printf("%d\n", size);
return 0;
}
जैसा कि अपेक्षित था, यह 5 रिटर्न देता है।
संपादित करें: लोगों ने इस उत्तर को इंगित किया , लेकिन वाक्यविन्यास थोड़ा अलग है, अर्थात अनुक्रमण विधि
size = (&arr)[1] - arr;
इसलिए मेरा मानना है कि दोनों प्रश्न मान्य हैं और समस्या के लिए थोड़ा अलग दृष्टिकोण है। अपार मदद और पूरी तरह से स्पष्टीकरण के लिए आप सभी का धन्यवाद!
*((*(&array + 1)) - 1)
स्वचालित सरणी के अंतिम तत्व को प्राप्त करने के लिए उपयोग करना सुरक्षित है? । tl; डॉ *(&a + 1)
आह्वान अपरिभाषित Behvaior
(ptr)[x]
जैसा है वैसा ही है *((ptr) + x)
।
&a + 1
किसी भी मान्य वस्तु की ओर इशारा नहीं किया गया है, इसलिए यह अमान्य है।