下面是代码,我对如何使用双指针intstruct _AReportstruct _BReport感到困惑。
我的系统运行在一台嵌入式计算机上,我用VS来调试这些部件。
整个系统由1struct _AReport、17struct _BReport和16struct _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;
}

最佳答案

如果您的问题是这个问题是否需要指向指针的指针,那么答案是否定的:指针算法允许单个指针访问1D数组的所有元素。
但如果您的问题是最后一行是否正确访问了Br的元素,那么答案是肯定的以下是实际情况:
Ar.breport是指向数组第一个元素的指针(fromBrBReport *Br_Pointer = Br; Ar.breport = &(Br_Pointer);是指向BrPointer的第一个元素的指针)
Br的定义与Ar.breport[0]=>相同,它是指向*(Ar.breport)的第一个元素的指针
因此Br是通过指针算法指向Ar.breport[0] + 1的第二个元素的指针
然后,使用这两个指针取消对它们的引用并访问它们所指向的Br_b成员是合法的。
您只需添加以下内容即可确保:

printf("%d - %d - %d\n", Br[0]._b, Br[1]._b, Br[2]._b);

就在BReport之前(在添加return 0;..之后),应该会打印#include <stdio.h>

关于c - 如何正确使用双指针结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49167479/

10-14 19:57
查看更多