在不同函数的struct中访问struct

cju*_*b39 0 c struct

我有嵌套的结构,我在向不同函数的内部结构赋值时遇到问题.我的结构定义为:

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

typedef struct {
    Measurement vref;
    Measurement vout;
    Measurement voutShort; 
} Unit;
Run Code Online (Sandbox Code Playgroud)

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

takeMeasurement(Unit unit){
    int readingNum = 42;
    unit.vout.readingNum = readingNum;
}
Run Code Online (Sandbox Code Playgroud)

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

`printf("%i", unit.vout.readingNum)`
Run Code Online (Sandbox Code Playgroud)

总是打印0.

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

hmj*_*mjd 5

C通过由参数导致的变化被到由unittakeMeasurement()被施加到一个副本提供给函数的参数的.将a的地址传递Unit给函数以确保调用者可以看到更改:

void takeMeasurement(Unit* unit){
    int readingNum = 42;
    unit->vout.readingNum = readingNum;
}
Run Code Online (Sandbox Code Playgroud)

要调用:

Unit u = { 0.0 };
takeMeasurement(&u);
Run Code Online (Sandbox Code Playgroud)

还希望将指针传递给const struct只读取值的函数,struct以避免复制该值struct,特别是如果struct它很大:

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