指针和结构通过函数传递

时间:2014-01-30 18:48:45

标签: c function pointers structure

这可能是一个简单的问题,但我从未遇到类似的问题。首先我要说的是我在GCC编译器中使用标准C,这适用于嵌入式系统。

我有一个结构,它包含一个平均数组,运行和,零偏移,比例因子,除数因子和指向平均数组的指针。基本上我宣布了这个:

typedef struct  tag_avgAry {
    int array[AVG_ARRY_LEN];
    int *start;
    int *current;
    int *end;
    long sum;
    int avg;
    int factor;
    int zero;
    int value;
    unsigned char scale;
} avgAry;

所以我的问题是这个。我需要将使用此typedef和数据变量创建的结构传递给处理使用新数据更新运行平均值和数组表的函数。我已经声明了一个函数:

 void processArray(int data, avgAry array)

现在我知道我需要将数组更改为 *数组,以便我实际修改我传递的结构而不仅仅是副本,但我该怎么做然后处理作为结构一部分的指针。即如果我的一个结果被称为phA,那么将数字8存储在我要写的结构中的数组的当前元素中:

*phA.current++ = 8;

然后检查“当前”指针对“开始”和“结束”指针并在需要时重置它......但是如果我通过调用processArray函数来执行它,如下所示......

processArray(8,(avgAry *)(&phA));

我如何引用结构中的指针,因为我的理解是在我写的函数中访问,例如,phA的sum元素:

*array.sum = data;

但如果我想访问指针电流,我会写这样的东西吗?

*(*array.current)++ = data;

对不起,这已经很长一段时间了,因为我必须深入了解指针和结构......我猜想花费太多时间做ASM。

2 个答案:

答案 0 :(得分:4)

访问数组元素的惯用方法如下

array[0]->current += data;

->运算符是(*theValue).theMember的简写,是访问指针成员的首选方法。 [0]索引器语法是访问数组元素的首选方法。如果您正在进行指针运算,则可以直接在数组上使用*

答案 1 :(得分:0)

应该是*(*array).current,但您可以使用*array->current