아무도 나에게 왜 다음 코드가 10 대신 20을 인쇄하는지 설명해 주시겠습니까?다음 코드의 출력 .. Union
덕분에 노동 조합의 정의에
#include<stdio.h>
int main()
{
union var
{
int a, b;
};
union var v;
v.a=10;
v.b=20;
printf("%d\n", v.a);
return 0;
}
아무도 나에게 왜 다음 코드가 10 대신 20을 인쇄하는지 설명해 주시겠습니까?다음 코드의 출력 .. Union
덕분에 노동 조합의 정의에
#include<stdio.h>
int main()
{
union var
{
int a, b;
};
union var v;
v.a=10;
v.b=20;
printf("%d\n", v.a);
return 0;
}
: 두 필드가 같은 주소를 공유하기 때문에 동시에 v.a
및 v.b
을 사용할 수 없습니다.
노조 유형이 부재의 중복 비어 있지 않은 세트가 개체를 설명 선택적으로 지정된 이름과 아마도 구별 유형이있는 각 있는 : 표준을 인용합니다.
여기에서 v.b
에 지정하면 v.a
을 무시합니다. 두 변수의 유형이 같기 때문에 상황이 추악하지는 않지만, a
이 float
및 b
인 경우를 상상해보십시오.
var
이 두 개의 다른 int
을 포함하는 복합 변수가되도록하려면 union
이 아닌 struct
을 사용해야합니다.
유니언은 포함 된 가장 넓은 유형을 저장할만큼 충분히 넓으며 유형은 동일한 주소를 공유합니다. a
과 b
을 구별하려면 struct
을 사용하십시오. C99 표준에서
노조의 크기는 회원들의 가장 큰를 포함 할 SUF 과학 효율적인이다. 의 값은 대부분의 구성원 중 하나를 조합 개체에 언제든지 저장할 수 있습니다. 적절하게 변환 된 유니온 객체에 대한 포인터는 각 멤버를 가리키며 (또는 멤버가 비트 필드 인 경우), 그 반대의 경우도 마찬가지입니다. 섹션 6.5.8에서
: 같은 노조 개체의 멤버
모든 포인터는 동등 비교합니다.
유니온은 다른 유형 수정 자와 동일한 메모리에 대한 액세스를 제공하는 것입니다. 따라서 두 번째 할당이 존재하기 때문에 코드에서 첫 번째 할당은별로 의미가 없습니다. 마지막 순서대로 메모리에 영향을 미치므로 마지막으로 할당 된 값을 얻습니다.
게시하기 전에'union '정의를 읽었습니까? – ruslik