C 通过函数传递的指针和结构

C 通过函数传递的指针和结构,c,function,pointers,structure,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;

这可能是一个简单的问题,但我从未遇到过这样的问题。首先,我要说的是,我在一个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)
现在我知道我需要将array更改为*array,这样我实际上在修改我传递的结构,而不仅仅是一个副本,而是如何处理作为结构一部分的指针。i、 e.如果我的一个stuct被称为phA,那么要将数字8存储在结构中数组的当前元素中,我会写:

*phA.current++ = 8;
*array.sum = data;
然后根据“开始”和“结束”指针检查“当前”指针,并在需要时重置它。。。但是如果我通过如下调用processArray函数来实现

processArray(8,(avgAry *)(&phA));
我如何引用结构中的指针,因为我的理解是访问,比方说,我将编写的函数中phA的sum元素:

*phA.current++ = 8;
*array.sum = data;
但是如果我想访问指针电流,我会写这样的东西吗

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

对不起,我已经很久没有深入了解指针和结构了。。。我想我花了太多时间在ASM上。

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

array[0]->current += data;

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

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

array[0]->current += data;

->
运算符是
(*值)的简写形式。成员是访问指针成员的首选方法。
[0]
索引器语法是访问数组元素的首选方法。直接在数组上使用
*
是可以接受的,但是如果你在做指针运算,它应该是
*(*array)。当前的
>但是你可以只使用
*数组->当前的
它应该是
*(*array)。当前的
但是你可以只使用
*数组->当前的
这个。。。非常感谢!我在读OP的问题,没读完就发疯了,谢谢Jared让我恢复了理智和冷静。好的。我想我明白这一点,但在我的情况下,我的新成员只是简单地称为数组,以明确起见。它实际上不是一个数组,而是一个包含多个变量、指针和一个整数数组作为结构成员的结构。因此,我是否仍会以同样的方式来执行此操作,即不使用[0]?@user322142必须知道
数组的确切类型才能回答此问题。。。非常感谢!我在读OP的问题,没读完就发疯了,谢谢Jared让我恢复了理智和冷静。好的。我想我明白这一点,但在我的情况下,我的新成员只是简单地称为数组,以明确起见。它实际上不是一个数组,而是一个包含多个变量、指针和一个整数数组作为结构成员的结构。因此,我是否仍会以同样的方式来执行此操作,而不使用[0]?@user322142必须知道
数组的确切类型才能回答此问题