0

我有嵌套结构,并且在为不同函数中的内部结构分配值时遇到问题。我的结构定义为:

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

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

measureUnit()在我声明Unit unit;我调用的函数 ( ) 中takeMeasurement(unit)(为了清楚起见,我在下面简化了)并且我尝试将值分配给内部 Measurement 结构中的某些值:

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

然后,当我尝试访问printData(Unit unit)从中调用的这些值时measureUnit()

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

总是打印0

这些值不应该unit通过不同的功能“跟随”吗?

4

2 回答 2

5

C 通过传递参数,从而将更改unit应用于提供给函数的参数takeMeasurement()副本。将 a 的地址传递Unit给函数以确保调用者可以看到更改:

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

调用:

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

还希望将指向 a 的指针传递给const struct仅读取 的值的函数,struct以避免复制struct,尤其是在struct很大的情况下:

void printData(const Unit* unit)
{
    printf("%i", unit->vout.readingNum);
}
于 2013-06-25T20:00:01.720 回答
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"
于 2013-06-25T19:59:47.600 回答