我有嵌套的结构,我在向不同函数的内部结构赋值时遇到问题。我的结构定义为:
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
吗?
答案 0 :(得分:5)
C通过 value 传递参数,导致对unit
中takeMeasurement()
的更改应用于提供给的参数的副本功能。将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"