2013-06-25 54 views
0

我有嵌套的結構體,並且在將值分配給不同函數中的內部結構時遇到困難。我的結構被定義爲:在結構中訪問不同函數中的結構體

typedef struct { 
    double reading; 
    float readingTime; 
    int readingNum; 
} Measurement; 

typedef struct { 
    Measurement vref; 
    Measurement vout; 
    Measurement voutShort; 
} Unit; 

在函數(measureUnit())其中,I聲明Unit unit;我請takeMeasurement(unit)(我簡化了下面的清晰度),並且其中我嘗試將值分配給在內部的測量結構的一些值:

takeMeasurement(Unit unit){ 
    int readingNum = 42; 
    unit.vout.readingNum = readingNum; 
} 

當我再嘗試在printData(Unit unit)這是從measureUnit()調用來訪問這些值,

`printf("%i", unit.vout.readingNum)` 

總是打印0

不應該通過不同的功能「跟隨」unit左右?

回答

5

下用傳遞參數導致takeMeasurement()unit正在發生變化被應用於參數的副本供給函數。傳遞一個Unit的地址的功能,確保變化是顯而易見的給調用者:

void takeMeasurement(Unit* unit){ 
    int readingNum = 42; 
    unit->vout.readingNum = readingNum; 
} 

要調用:

Unit u = { 0.0 }; 
takeMeasurement(&u); 

也希望以一個指向const struct傳遞給函數只讀取struct的值,以避免使struct的副本,特別是如果struct很大:

void printData(const Unit* unit) 
{ 
    printf("%i", unit->vout.readingNum); 
} 
2

您將結構本身傳遞給函數,這意味着您將結構的副本傳遞給函數並修改此副本,而不是原始結構。您可能需要一個指針傳遞到結構來代替:

takeMeasurement(Unit* unit){ 
    int readingNum = 42; 
    unit->vout.readingNum = readingNum; 
} 

// call it something like that 
takeMeasurement(&my_unit_struct); 
//   ^this means "the address of my_unit_struct"