在不同的函数中访问struct中的struct

在不同的函数中访问struct中的struct,c,struct,C,Struct,我有嵌套结构,在不同的函数中给内部结构赋值有困难。我的结构定义为: typedef struct { double reading; float readingTime; int readingNum; } Measurement; typedef struct { Measurement vref; Measurement vout; Measurement voutShort; } Unit; 在函数measureUnit中,我声明了单位

我有嵌套结构,在不同的函数中给内部结构赋值有困难。我的结构定义为:

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

typedef struct {
    Measurement vref;
    Measurement vout;
    Measurement voutShort; 
} Unit;
在函数measureUnit中,我声明了单位;我调用TakeMeasurementIt,为了清晰起见,我在下面对其进行了简化,并尝试将值分配给内部度量结构中的某些值:

takeMeasurement(Unit unit){
    int readingNum = 42;
    unit.vout.readingNum = readingNum;
}
当我尝试访问从measureUnit调用的printDataUnit中的这些值时

总是打印0


这些值不应该通过不同的函数跟随单元吗?

您将结构本身传递给函数,这意味着您将结构的副本传递给函数并修改该副本,而不是原始结构。您可能希望传递指向结构的指针:

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"
C按值传递参数,导致takeMeasurement中对unit所做的更改应用于提供给函数的参数副本。将单元地址传递给函数,以确保调用者可以看到更改:

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

Unit u = { 0.0 };
takeMeasurement(&u);
还需要将指向const struct的指针传递给只读取结构值的函数,以避免复制结构,特别是在结构较大时:

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