2014-01-30 162 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