오늘 문제가 발생했습니다. 프로그램이 구조체의 멤버 값을 수정해야 합니다.
코드는 다음과 같습니다.
typedef struct
{
int n;
}St;
void a(St L);
int main()
{
St L;
L.n=0;
printf("%d\n",L.n);
a(L);
printf("%d",L.n);
getchar();
return 0;
}
void a(St L)
{
L.n=1;
}
프로그램은 구조 변수를 선언하고 함수의 멤버 값을 수정하지만 적용되지 않고 두 번 모두 출력이 0입니다.
문제는 함수의 값 전달과 주소 전달에 있을 것으로 보이며, 수정 사항은 다음과 같습니다.
typedef struct
{
int n;
}St;
void a(St *L);
int main()
{
St L;
L.n=0;
printf("%d\n",L.n);
a(&L);
printf("%d",L.n);
getchar();
return 0;
}
void a(St *L)
{
(*L).n=1;
}
주소로 전달될 함수 매개변수와 실제 매개변수를 수정하면 됩니다.
작은 문제가 있습니다.
(*L).n=1;
수정된 함수 내에서 값을 할당할 때 괄호를 반드시 추가해야 합니다. a. 점 기호는 곱셈 기호보다 우선순위가 높습니다. 괄호를 추가하지 않으면 잘못된 할당이 발생합니다.
*Ln=1;
은 주소 Ln의 값을 1로 변경한다는 뜻인데, 여기서 Ln은 주소가 아닙니다.전달된 형식 매개변수 L은 구조체의 주소이고, address.n은 언급하기가 더욱 어렵습니다.
(*L).n=1;
괄호를 추가하면 구조체인 L의 주소 값이 되고, 멤버 n의 값은 1로 변경됩니다.