如何复制结构指针

时间:2015-03-31 15:18:21

标签: c pointers struct

我有2个功能:

Func.h

 struct Ex
    {
      int a;
      int b;
    }

Func.cpp

void Copy(Ex ** ex1, Ex *ex2)
{
   //
}

void Init(Ex **ex)
{
  *ex = (Ex*)malloc(3*sizeof(Ex));
  Ex *ex2 = (Ex*)malloc(sizeof(Ex));
  Copy(&(*ex+1), ex2)              //error here
}

有谁能告诉我如何解决这个错误?

谢谢!!!

1 个答案:

答案 0 :(得分:1)

您遇到的困难是因为您未在struct Ex函数中创建类型为Init 的3个指针。您只是创建一个指向内存块的指针,该内存块足以容纳3个struct Ex 。这很好,但是你不能依赖普通的数组语法来传递或访问ex中的值。 负责将指针地址提供给ex中所需的任何值。

以下是您的代码的快速示例。已更改Init以使用创建大小的数字结构的其他参数,以及成员ab的初始值

就个人而言,我发现在main中创建原始结构更容易struct Ex **ex,然后将地址作为指向Init的三重指针传递,但这取决于您。保持您的方法,看看以下内容:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Ex
{
    int a;
    int b;
};

/* simple copy funciton */
void Copy(struct Ex *ex1, struct Ex *ex2)
{
    memcpy (ex1, ex2, sizeof (struct Ex));
}

/* arguments, address of *ex, num to create, initial values .a=va, .b=vb */
void Init(struct Ex **ex, size_t n, int va, int vb)
{
    size_t i = 0;
    size_t offset = sizeof **ex;

    *ex = malloc (n * offset);
    struct Ex *ex2 = malloc (sizeof *ex2);

    ex2-> a = va;
    ex2-> b = vb;

    for (i = 0; i < n; i++)
        Copy (*ex + i * offset, ex2);
}

int main (void) {

    struct Ex *ex = NULL;
    size_t offset = sizeof *ex;
    size_t i = 0;

    Init (&ex, 3, 5, 6);  /* initialize 3 ex, with initial values of 5, 6 */

    for (i = 0; i < 3; i++)
        printf ("\n (ex +%2lu)->a : %d\n (ex +%2lu)->b : %d\n",
                i * offset, (ex + i * offset)->a,  i * offset, (ex + i * offset)->b);

    return 0;
}

<强>输出

$ ./bin/structinitcopy

 (ex + 0)->a : 5
 (ex + 0)->b : 6

 (ex + 8)->a : 5
 (ex + 8)->b : 6

 (ex +16)->a : 5
 (ex +16)->b : 6