2012-05-23 1 views
3

로 구조체를 전달 나는 다음과 같은 구조체를 정의했습니다. 나는 그것을 참조로 전달하려고 시도하지만 값은 변하지 않습니다. 나는이 함수를 호출 할 때C :</p> <pre><code>typedef struct { double salary; } Employee; </code></pre> <p>내가 <code>salary</code>의 값을 변경하려면 : 참조

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

에서, salary가 변경되지 : 아래는 코드입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+2

. C에는 참조로 전달이 없습니다. – robert

답변

7
당신은 원래의 포인터를 전달하는

, 하지만는 당신은 그것의 복사본을 생성 :

Employee myEmployee =*e; 

는 복사본을 만듭니다.

e->salary = newSalary; 

합니다.

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

이 방법은, 두 변수가 같은 객체를 가리 킵니다 : 또는, 당신은은 어떤 이유로 보조 변수가 있어야합니다 합니다. 당신이 발신자의 메모리를 할당 한 가정

+0

도트를 -> – giorashc

+0

으로 바꿔야합니다. C가 참조로 전달되지 않았 음을 추가합니다. –

+0

@AmigableClarkKant 나는 원래의 가치를 바꿀 수 있다는 의미에서 (희망) 그는 그것을 의미한다고 생각한다. –

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

코드에서 구조체의 로컬 복사본을 만들고이 로컬 복사본 만 변경됩니다.

1

, 그것은해야한다 : 당신은 직원을 복사하는

e->salary= newSalary;