gpt4 book ai didi

c - 使用指针访问带有数组的两个结构

转载 作者:行者123 更新时间:2023-11-30 20:20:51 25 4
gpt4 key购买 nike

我的代码遇到了另一个问题。我想通过简单的指针使用来访问所有 3 个值。但我的指针跳得太远了。我的输出是这样的:

  1. 值为 1

  2. 值为 4194432

  3. 值为 2686824

我想我的问题是,我的指针来自错误的类型。所以pointer++不会跳转到下一个数组元素。我真的不知道,我该如何解决这个问题。(这只是重现我的问题的一个简单示例,因此不要寻找这样做的意义)

typedef struct _A {
int value;
}A;

typedef struct _B {
A array[10];
}B;

int main()
{
A atest;
B btest;
B *p=NULL;

btest.array[0].value=1;
btest.array[1].value=3;
btest.array[2].value=5;

p=malloc(10 * sizeof(btest));
p=&btest.array;
int i=0;

for(i=0;i<3;i++)
{
printf("\n%d. Value is %d\n",i+1,p++->array->value);
}

return 0;
}

感谢您的阅读,如果我的解释中缺少某些内容,那么我会道歉并添加它。

编辑:

除了一些程序员杜德解决方案之外,我还添加了一个简单的转换机制:

    q=(A*) p;
q++;
p =(B*)q;

感谢您的帮助:)

最佳答案

这些行

p=malloc(10 * sizeof(btest));
p=&btest.array;

包含两个问题。第一个是,在第二次分配时,您会丢失分配的内存。它不会复制 btest.array 的内容。

第二个问题是,p是一个指向B的指针,但&btest.array是一个指向十个数组的指针A 元素(其类型为 A (*)[10])。这两者是非常不同的类型。

如果要将btest复制到为p分配的内存中(这是一个指向ten B 结构有点过分)例如

p=malloc(sizeof *p);
memcpy(p, &btest, sizeof *p);

然后到下一个问题:

p++->array->value

p++ 将使 p 指向 p 指向的数组中的下一个元素,但是那是错误的。你应该循环 p->array 而不是像

p->array[i].value

关于c - 使用指针访问带有数组的两个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44549152/

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