我对如何使用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不能工作。
发布于 2011-04-01 18:46:56
f2_int_ptr()需要变成这样:
void f2_int_ptr() {
int i = 0;
void *elements = malloc(size * sizeof(int*));
for ( i = 0; i < size; i++ ) {
int *v = malloc ( sizeof(int));
memcpy ( v, &i, sizeof ( int ));
memcpy ( INDEX(i) , &v, sizeof (int*));
}
for ( i = 0; i < size; i++ ) {
int *v;
memcpy ( &v, INDEX(i), sizeof(int *));
printf ( "%d\n", *v );
}
}请注意memcpy()参数的细微变化。
注意:我真的不会写这样的代码!这是非常难以理解的。
发布于 2011-04-01 18:44:57
代码非常难看,所以我甚至不知道它应该如何工作,但是:为什么你要在这里使用&v:
memcpy ( &v, INDEX(i), sizeof ( int ));V是指针本身:
int *v = (int*)0;发布于 2011-04-01 18:57:19
如果您将指针存储在element中,我认为最后一个memcpy需要使用&v将元素复制到指针v,类似于v=elementsi。
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 );
}
}https://stackoverflow.com/questions/5512234
复制相似问题