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



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

  1. 值为 1

  2. 值是4194432

  3. 值是2686824

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

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 %dn",i+1,p++->array->value);
    }
    return 0;
}

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

编辑:

除了一些程序员Dude Sollution之外,我还添加了一个简单的铸造机制:

    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的内存中(这是指向十个B结构的指针,这有点矫枉过正(,例如

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

然后到下一个问题:

p++->array->value

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

p->array[i].value

最新更新