2014-01-30 128 views
1

这可能是一个简单的问题,但我从来没有碰到类似的东西。让我首先说我在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) 

现在我知道我需要改变阵列*阵列让我真正修改结构,我传递,而不仅仅是一个副本,但怎么办然后我处理作为结构一部分的指针。也就是说,如果我的stucts的一个被称为PHA然后存储在结构数组的当前元素8号我会写:

*phA.current++ = 8; 

然后将检查“当前”指针对着“开始”和“结束”的指针,如果需要重新设置......但是,如果我这样做,通过调用processArray功能如下...

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

我如何引用指针的结构,因为我的理解是,访问,可以说,功能我会写phA的和元素:

*array.sum = data; 

但是,如果我想访问指针电流,我会写这样的事情吗?

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

对不起,它只是一个漫长的时间,因为我已经在使用指针和结构...已浪费太多时间做ASM我想深度得到这个。

回答

0

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

4

访问数组元素将是下面

array[0]->current += data; 

->操作者是短手(*theValue).theMember和是用于访问指针构件的优选方法中的惯用的方式。 [0]索引器语法是访问数组元素的首选方法。直接在阵列上使用*是可以接受的,但是如果您正在使用指针算术

+0

这个......非常多这个!我在阅读OP的问题,并在完成之前变得生气,谢谢Jared让我的脑海中恢复了理智和冷静。 – speeder

+0

好的。我想我明白这一点,但在我的情况下,我的传入成员只是简单地称为数组。它实际上不是一个数组,而是一个包含多个变量,指针和一个整数数组作为结构成员的结构。那么我是否仍然按照同样的方式去做[0]? – balmerjd

+0

@ user3221422必须知道'array'的确切类型才能回答 – JaredPar