如何正确使用双指针结构

时间:2018-03-08 07:19:57

标签: c pointers struct

下面是代码,我对如何使用双指针int struct _AReportstruct _BReport感到困惑。

我的系统在嵌入式计算机上运行,​​我使用VS来调试这些部件。 我的系统整体由1 struct _AReport,17 struct _BReport和16 struct _CReport组成。

目标是struct _AReport将包含所有信息。

我很擅长英语,感谢你耐心等待。

#include "stdafx.h"
typedef struct _AReport AReport;
typedef struct _BReport BReport;
typedef struct _CReport CReport;

typedef struct _AData AData;
typedef struct _BData BData;
typedef struct _CData CData;
typedef struct _ABCDatas ABCDatas;
struct  _AReport
{
    AData *adata;
    BReport **breport;
};

struct  _BReport
{
    int _b;
    BData *bdata;
    CReport **creport;
};

struct  _CReport
{
    int _c;
    CData *cdata;
};

int main()
{
    int i = 0;
    AReport Ar;
    //BReport Br_dyadic[17][16] = { 0 };
    BReport Br[17];
    BReport *Br_Pointer = Br;
    Ar.breport = &(Br_Pointer);

    for (i = 0; i < 17; i++)
    {
        Br[i]._b = i + 1;
    }
    (Ar.breport[0])->_b = 99;
    (Ar.breport[0] + 1)->_b = 99;
    return 0;
}

1 个答案:

答案 0 :(得分:0)

如果你的问题是这个问题是否需要指针指针,答案是否定的:指针算术允许单个指针访问一维数组的所有元素。

但如果您的问题是,最后一行是否正确访问了Br 的元素,那么答案是肯定的。这是实际发生的事情:

  • Ar.breport是指向数组Br的第一个元素的指针(来自BReport *Br_Pointer = Br; Ar.breport = &(Br_Pointer);BrPointer是指向Br的第一个元素的指针)
  • Ar.breport[0] 按照定义*(Ar.breport) =&gt;相同它是指向Br
  • 的第一个元素的指针
  • 所以Ar.breport[0] + 1是指针算术指向Br
  • 的第二个元素的指针

然后使用这两个指针取消引用它们并访问它们所指向的_b的{​​{1}}成员是合法的。

您只需添加以下内容即可确保:

BReport

printf("%d - %d - %d\n", Br[0]._b, Br[1]._b, Br[2]._b); 之后(在添加return 0;之后...)并且应该打印#include <stdio.h>