संभव डुप्लिकेट:
How to find the sizeof(a pointer pointing to an array)सी, malloc() और सरणी लंबाई
मैं सी में एक गतिशील सरणी बनाने का तरीका सीख रहा हूँ, लेकिन एक मुद्दा मैं कर सकते हैं भर में आ गए हैं पता नहीं लगाओ।
अगर मैं कोड का उपयोग करें:
int num[10];
for (int i = 0; i < 10; i++) {
num[i] = i;
}
printf("sizeof num = %li\n sizeof num[0] = %li", sizeof(num), sizeof(num[0]));
मैं आउटपुट प्राप्त:
sizeof num = 40
sizeof num[0] = 4
यह मैं क्या होने उम्मीद थी है। लेकिन अगर मैं जैसी सरणी के आकार malloc:
sizeof num = 8
sizeof num[0] = 4
मैं उत्सुक हूँ पता करने के लिए क्यों सरणी के आकार 40 है जब मैं निश्चित का उपयोग करें:
int *num;
num = malloc(10 * sizeof(int));
for (int i = 0; i < 10; i++) {
num[i] = i;
}
printf("sizeof num = %li\n sizeof num[0] = %li", sizeof(num), sizeof(num[0]));
तो मैं आउटपुट प्राप्त लंबाई विधि, लेकिन जब मैं malloc()
का उपयोग नहीं करता हूं।
'num' दूसरे मामले में int करने के लिए सूचक है और इसका आकार 32 बिट के लिए मशीन यानी पर निर्भर करता है' आधार यह 4 बाइट की है और 64 बिट के लिए यह 1 मामले संख्या में 8 bytes.while की है सूचक नहीं है यह है सरणी का पता 'ताकि आकार() 'सरणी का कुल आकार देता है। । – krpra