2013-06-25 53 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"