यह एक सूचक का उपयोग कर, और ढेर malloc
का उपयोग करने पर स्मृति आवंटन द्वारा किया जा सकता है। ध्यान दें कि बाद में यह पूछने का कोई तरीका नहीं है कि स्मृति ब्लॉक कितना बड़ा है। आपको सरणी आकार का ट्रैक रखना होगा।
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv)
{
/* declare a pointer do an integer */
int *data;
/* we also have to keep track of how big our array is - I use 50 as an example*/
const int datacount = 50;
data = malloc(sizeof(int) * datacount); /* allocate memory for 50 int's */
if (!data) { /* If data == 0 after the call to malloc, allocation failed for some reason */
perror("Error allocating memory");
abort();
}
/* at this point, we know that data points to a valid block of memory.
Remember, however, that this memory is not initialized in any way -- it contains garbage.
Let's start by clearing it. */
memset(data, 0, sizeof(int)*datacount);
/* now our array contains all zeroes. */
data[0] = 1;
data[2] = 15;
data[49] = 66; /* the last element in our array, since we start counting from 0 */
/* Loop through the array, printing out the values (mostly zeroes, but even so) */
for(int i = 0; i < datacount; ++i) {
printf("Element %d: %d\n", i, data[i]);
}
}
यही है। इसका क्या मतलब है यह एक और अधिक शामिल स्पष्टीकरण है कि यह क्यों काम करता है :)
मुझे नहीं पता कि आप सी पॉइंटर्स को कितनी अच्छी तरह जानते हैं, लेकिन सी में सरणी पहुंच (जैसे array[2]
) वास्तव में एक पॉइंटर के माध्यम से स्मृति तक पहुंचने के लिए एक शॉर्टेंड है। data
द्वारा इंगित स्मृति तक पहुंचने के लिए, आप *data
लिखते हैं। यह सूचक को dereferencing के रूप में जाना जाता है। चूंकि data
int *
प्रकार है, तो *data
int
प्रकार का है। अब जानकारी के एक महत्वपूर्ण टुकड़े के लिए: (data + 2)
का अर्थ है "data
द्वारा इंगित एड्रेस को 2 इंच का बाइट आकार जोड़ें"।
सी में एक सरणी आसन्न स्मृति में मूल्यों का एक अनुक्रम है। array[1]
array[0]
के बगल में है। इसलिए जब हम स्मृति का एक बड़ा ब्लॉक आवंटित करते हैं और इसे एक सरणी के रूप में उपयोग करना चाहते हैं, तो हमें अंदर के प्रत्येक तत्व को प्रत्यक्ष पता लगाने का एक आसान तरीका चाहिए। सौभाग्य से, सी हमें पॉइंटर्स पर सरणी नोटेशन का भी उपयोग करने देता है। data[0]
का अर्थ *(data+0)
जैसा है, अर्थात् "data
द्वारा दी गई स्मृति तक पहुंच"। data[2]
का अर्थ *(data+2)
है, और स्मृति ब्लॉक में तीसरे int
का उपयोग करता है।
'malloc' के बारे में कैसे? Arrays पॉइंटर्स नहीं हैं, और पॉइंटर्स सरणी नहीं हैं। लेकिन पॉइंटर्स को आसानी से सरणी की तरह एक्सेस किया जा सकता है और एक वर्णित सरणी पहले तत्व को पॉइंटर को मूल्यांकन करती है। –
@pst: क्या आपने सवाल बिल्कुल पढ़ा था? "मुझे पता है कि यह मॉलोक का उपयोग करके किया जा सकता है, लेकिन मुझे नहीं पता कि इसका अभी तक उपयोग कैसे किया जाए।" –
मैंने सर को बताया कि मुझे इसके बारे में पता है, लेकिन मुझे नहीं पता कि इसका उपयोग कैसे किया जाए, यह बताएं कि मेरे लिए सबसे अच्छा जवाब कैसे होगा: डी – arscariosus