首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >memcpy和指针

memcpy和指针
EN

Stack Overflow用户
提问于 2011-04-01 18:40:25
回答 4查看 36.3K关注 0票数 12

我对如何使用memcpy读取复制到数组中的指针感到困惑。下面是我尝试过的方法,但不起作用。

基本上,我已经分配了内存块,我在其中复制指针类似于数组方式,但在重试期间它不起作用。虽然这适用于基本数据类型

我希望在element块中存储任何内容,它可以是integerspointers

代码语言:javascript
复制
#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不能工作。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-01 18:46:56

f2_int_ptr()需要变成这样:

代码语言:javascript
复制
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()参数的细微变化。

注意:我真的不会写这样的代码!这是非常难以理解的。

票数 8
EN

Stack Overflow用户

发布于 2011-04-01 18:44:57

代码非常难看,所以我甚至不知道它应该如何工作,但是:为什么你要在这里使用&v:

代码语言:javascript
复制
memcpy ( &v, INDEX(i), sizeof ( int ));

V是指针本身:

代码语言:javascript
复制
int *v = (int*)0;
票数 0
EN

Stack Overflow用户

发布于 2011-04-01 18:57:19

如果您将指针存储在element中,我认为最后一个memcpy需要使用&v将元素复制到指针v,类似于v=elementsi。

代码语言:javascript
复制
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 );
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5512234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档