형식 매개변수로서의 C 언어 구조

오늘 문제가 발생했습니다. 프로그램이 구조체의 멤버 값을 수정해야 합니다.
코드는 다음과 같습니다.

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로 변경됩니다.

추천

출처blog.csdn.net/weixin_45772041/article/details/108920791