Category (Click)
개발보드 덕질하기
🌴

[구조체/공용체] 데이터 묶어주기

구조체/공용체 데이터 묶어주기

C언어에서 데이터를 묶어서 사용할 때 구조체와 공용체를 사용합니다.

구조체

구조체는 여러 개의 변수를 묶어서 하나의 데이터 타입으로 정의하는 방법입니다.
구조체는 다음과 같은 형식으로 정의됩니다.
예를 들어, 나이와 학년을 담는 조구체를 정의하면 위의 왼쪽과 같습니다. 이렇게 만들어진 구조체는 오른쪽 사진과 같이 메모리에 저장됩니다.
실제로, 구조체를 생성한 후 siezof() 연산자를 통해 크기를 확인하면 8 byte 공간을 차지한다는 것을 알 수 있습니다. 위의 오른쪽 사진과 동일하죠.
구조체 변수를 생성한 후 메모리의 주소를 확인해보면 grade의 메모리 주소가 age에 비해 int 자료형에서 차지하는 공간인 4 byte만큼 뒤에 있는 것을 알 수 있습니다.
구조체의 멤버 변수는 위와 같이 구조체 변수도트연산자(.)를 사용해 접근할 수 있습니다.

공용체

공용체는 구조체와 비슷하지만, 멤버 변수들이 메모리를 공유한다는 점에서 차이가 있습니다.
공용체는 다음과 같은 형식으로 정의됩니다.
위의 왼쪽과 같은 코드로 공용체를 생성하면 메모리에는 오른쪽 사진과 같이 저장됩니다. 즉, 공용체는 멤버 변수 중 가장 큰 변수의 타입 만큼 공간을 차지합니다.
위의 공용체에서 가장 큰 멤버 변수는 4 byte를 차지하는 int형이기 때문에 student 공용체는 4 byte를 차지하는것을 확인할 수 있습니다.
그렇다면 멤버 변수들의 메모리 주소 시작점은 어떨까요?
네, 당연하게도 전부 같습니다.
이러한 특성으로 공용체는 한번에 하나의 목적으로만 사용할 수 있습니다. 만약 number에 999를 저장하고 character을 읽으면 이상한 숫자가 나오겠죠?