我很迷惑如何使用memcpy读取数组中复制的指针。 以下是我所尝试过的,但不起作用。memcpy和指针
基本上,我已经分配了一块内存,其中我拷贝类似于数组时尚的指针,但在重试期间它不起作用。虽然这适用于基本数据类型
我想在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
不起作用。
注意:所有对'void *'(和宏)进行的类型转换并不会让你的代码变得非常讨厌。你有什么理由在任何地方使用'void *'吗? – 2011-04-01 10:43:28
这适用于所有基本类型,但不适用于指针。 – Avinash 2011-04-01 10:44:47
如果你打算阅读,你应该尝试澄清你的代码。 C是一个骗局(http://www.gnu.org/fun/jokes/unix-hoax.html)不是这样的代码的参数。 – mouviciel 2011-04-01 10:52:52