i
में scanf
और sum
में बेकार नहीं है? यह कुछ भी नहीं बदलता है, यहां तक कि जब मैं &ptr
प्रिंट करता हूं तो यह मुझे स्मृति मानों में कोई अंतर नहीं दिखाता है।
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, *ptr, sum = 0;
printf("Enter number of elements: ");
scanf("%d", &n);
ptr = (int *)malloc(n * sizeof(int));
// if memory cannot be allocated
if (ptr == NULL) {
printf("Error! memory not allocated.");
exit(0);
}
printf("Enter elements: ");
for (int i = 0; i < n; ++i) {
scanf("%d", ptr + i);
sum = sum + *(ptr + i);
}
printf("Sum = %d", sum);
// deallocating the memory
free(ptr);
return 0;
}
5 जवाब
यदि आप योग और स्कैनफ दोनों में 'i' का उपयोग नहीं करते हैं, तो योग पर कोई प्रभाव नहीं पड़ेगा क्योंकि यह गतिशील स्मृति की पहली अनुक्रमणिका में इनपुट लेगा और इसे अधिलेखित कर देगा। यह 'i' डायनेमिक मेमोरी में इनपुट स्टोर करने में मदद कर रहा है।
'मैं' सूचक को बदलने वाला नहीं है। इसका उपयोग उस सरणी के i'th तत्व तक पहुँचने के लिए किया जाता है जिसे PTR इंगित करता है। I के बिना यह इस सरणी में उसी तत्व के लिए स्कैन करेगा, पहला तत्व
"फॉर लूप के अंदर
int i
क्या करता है?"
i
का उपयोग पॉइंटर ऑफ़सेट के लिए गतिशील रूप से आवंटित मेमोरी के बाद के int
ऑब्जेक्ट तक पहुंचने के लिए किया जाता है।
यह काम करता है:
(value of ptr [address of pointed object by ptr] + (i * sizeof(pointed object by ptr)))
.
शायद इस स्टैक ओवरफ़्लो प्रश्न पर एक नज़र डालें।
नोट: उद्देश्य केवल वस्तुओं की ओर इशारा करना और संशोधित करना है, न कि स्वयं सूचक। ptr
इस सूचक अंकगणित के कारण परिवर्तित नहीं होगा।
"यह कुछ भी नहीं बदलता है, यहां तक कि जब मैं
&ptr
प्रिंट करता हूं तो यह मुझे स्मृति मानों में कोई अंतर नहीं दिखाता है।"
शायद यह अलग-अलग मान नहीं दिखाता है क्योंकि आप पॉइंटर के पते को ही प्रिंट करते हैं, जो ऑफ़सेट का उपयोग करके पॉइंटर में नहीं बदलता है।
मैं "शायद" इसलिए कहता हूं क्योंकि मुझे नहीं पता कि आप वास्तव में ptr
का पता कैसे प्रिंट करते हैं। हो सकता है कि आपके पास किसी प्रकार का अपरिभाषित व्यवहार भी हो।
'i' एक बेकार मूल्य नहीं है, इसका उपयोग गतिशील सरणी के सही तत्व तक पहुंचने के लिए पॉइंटर को ऑफ़सेट करने के लिए किया जाता है।
यह उपयोग करने जैसा ही है
for (int i = 0; i < n; ++i) {
scanf("%d", &ptr[i]);
sum = sum + ptr[i];
}
for
में सूचकांक i
का उद्देश्य दुगना है:
- सुनिश्चित करें कि
n
नंबर पढ़े गए हैं औरsum
में संकलित हैं। - प्रत्येक परिवर्तित संख्या को
ptr
द्वारा इंगित सरणी में एक अलग प्रविष्टि में संग्रहीत करें।
यह देखते हुए कि कार्यक्रम क्या करता है, संख्याओं को एक सरणी में संग्रहीत करने की आवश्यकता नहीं है, या इस सरणी को आवंटित करने के लिए भी आवश्यक नहीं है।
यहाँ एक सरल संस्करण है:
#include <stdio.h>
int main() {
int n, v, sum = 0;
printf("Enter number of elements: ");
if (scanf("%d", &n) != 1)
return 1;
printf("Enter elements: ");
for (int i = 0; i < n; i++) {
if (scanf("%d", &v) != 1) {
printf("input error\n");
break;
}
sum = sum + v;
}
printf("Sum = %d\n", sum);
return 0;
}