gpt4 book ai didi

c - 如何复制结构体指针

转载 作者:行者123 更新时间:2023-11-30 21:02:30 24 4
gpt4 key购买 nike

我有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
}

谁能告诉我如何修复这个错误?

谢谢!!!

最佳答案

您遇到的困难是因为您没有创建 3 个类型 struct Ex 的指针 在您的 Init 中功能。您只是创建一个指向足以容纳 3 个 struct Ex 的内存块的指针。这很好,但是您不能依赖正常的数组语法来传递或访问 ex 中的值。 。 负责提供指向ex内您想要的任何值的指针地址。 .

以下是您的代码的快速示例。 Init已更改为采用要为其创建大小的数字结构以及成员的初始值 a 的附加参数和b

就个人而言,我发现在 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

关于c - 如何复制结构体指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29372217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com