下面是代码,我对如何使用双指针int struct _AReport
和struct _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;
}
答案 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>