मैं memcpy का उपयोग कर सरणी में कॉपी पॉइंटर्स को पढ़ने के तरीके पर भ्रमित हूं। मैंने जो कोशिश की है, वह निम्नलिखित है, लेकिन काम नहीं करता है।memcpy और pointers
असल में, मैंने स्मृति की ब्लॉक आवंटित की है जिसमें मैं सरणी फैशन के समान पॉइंटर्स कॉपी कर रहा हूं, लेकिन प्रतिशोध के दौरान यह काम नहीं कर रहा है। हालांकि यह मूल डेटा प्रकारों के साथ ठीक से काम करता है
मैं element
ब्लॉक में कुछ भी स्टोर करना चाहता हूं, यह integers
या pointers
हो सकता है।
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INDEX(x) ((char *)elements + (sizeof(int*) * (x)))
int size = 10;
void f2_int_ptr() {
int i = 0;
void *elements = (void*)malloc(size * sizeof(int*));
for (i = 0; i < size; i++) {
int *v = (int *) malloc (sizeof(int));
memcpy (v, &i, sizeof (int));
memcpy (INDEX(i) , v, sizeof (int*));
}
for (i = 0; i < size; i++) {
int *v = (int*)0;
memcpy (v, INDEX(i), sizeof(int *));
printf ("%d\n", *v);
}
}
void f1_int() {
int i = 0;
void *elements = (void*)malloc(size * sizeof(int));
for (i = 0; i < size; i++) {
memcpy (INDEX(i) , &i, sizeof (int));
}
for (i = 0; i < size; i++) {
int v;
memcpy (&v, INDEX(i), sizeof (int));
printf ("%d\n", v);
}
}
int main(){
f1_int();
f2_int_ptr();
return 0;
}
ऊपर कोड
f1_int
ठीक काम करता है लेकिन
f2_int_ptr
काम नहीं करता है में
।
नोट: यह सब टाइपकास्टिंग 'शून्य * '(और मैक्रो) से और आपके कोड को बहुत बुरा बना रहा है। क्या कोई कारण है कि आप हर जगह 'शून्य *' का उपयोग कर रहे हैं? –
यह सभी बुनियादी प्रकारों के लिए काम करता है, लेकिन केवल पॉइंटर्स के लिए काम नहीं करता है। – Avinash
यदि आप इसे पढ़ना चाहते हैं तो आपको अपने कोड को स्पष्ट करने का प्रयास करना चाहिए। सी एक धोखाधड़ी (http://www.gnu.org/fun/jokes/unix-hoax.html) इस तरह से कोड करने का तर्क नहीं है। – mouviciel