在不同函数的struct中访问struct

时间:2013-06-25 19:57:55

标签: c struct

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

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

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

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

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

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

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

始终打印0

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

2 个答案:

答案 0 :(得分:5)

C通过 value 传递参数,导致对unittakeMeasurement()的更改应用于提供给的参数的副本功能。将Unit的地址传递给函数,以确保调用者可以看到更改:

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

要调用:

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

还希望将指向const struct的指针传递给只读取struct值的函数,以避免复制struct,尤其是struct {1}}很大:

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

答案 1 :(得分: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"