C语言:通过引用传递结构体

3

我定义了以下结构:

typedef struct {
    double salary;
} Employee;

我想要改变salary的值。我试图通过引用传递它,但是值仍然没有改变。以下是代码:

void raiseSalary (Employee* e, double newSalary) {
    Employee myEmployee = *e;
    myEmployee.salary = newSalary;
}

当我调用此函数时,salary仍然保持不变。我做错了什么?

2
你正在复制员工。C语言不支持传递引用。 - robert
3个回答

7
您正在传递指向原始数据的指针,但是之后您又创建了它的副本:
Employee myEmployee =*e;

创建一个副本。

e->salary = newSalary;

可以这样做。或者,如果你非得为某些原因使用辅助变量:

Employee* myEmployee =e;
Myemployee->salary= newSalary;

这样,两个变量将指向同一个对象。


句点应替换为-> - giorashc
我想补充一下,C语言没有按引用传递的功能。 - Prof. Falken
@AmigableClarkKant 我认为(希望)他的意思是你可以更改原始值。 - Luchian Grigore

3
void raiseSalary(Employee* e, double newSalary){
    e->salary= newSalary;
    }

在你的代码中,你创建了结构体的本地副本,只有这个本地副本被更改。


1

假设您已经在调用者处分配了内存,那么应该是这样的:

e->salary= newSalary;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接