下面是代码,我对如何使用双指针intstruct _AReport
和struct _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
是指向数组第一个元素的指针(fromBr
,BReport *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/