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

[2023 방통대 C 스터디] 5. [구조체/공용체] 데이터 묶어주기

2023 방통대 C 스터디 강의노트
한국방송통신대학교 컴퓨터과학과의 C언어 스터디에 사용한 자료입니다.
배움은 끝이 없기에 강의노트라 하더라도 오류가 있을 수 있으며, 이 점에 대해서는 둥글게 지적 부탁드립니다.
읽기 전 아래 내용을 숙지하여주시기 바랍니다.
강의 노트에서 중요한 부분은 이렇게 노란색 전구()로 강조합니다.
한국어로 번역했을 때 뜻이 명확하지 않은 일부 용어는 의미를 분명히 하기 위해 한국어로 뜻을 번역하지 않고 영어 원문을 그대로 사용하거나 말음을 한국어로 표기합니다.
강의 노트는 스터디 내용을 대체할 수 없으며 이해를 위한 자세한 내용은 스터디에서 언급합니다.
강의 노트는 Light 테마에서 보시는것을 권장합니다.
스터디는 Windows 11, Visual Studio IDE 환경에서 진행합니다.
mac인 경우 패러렐즈를 이용해 Windows 11 ARM을 설치하여 동일하게 진행할 수 있습니다.
모든 강의 노트의 저작권은 작성자 차완기에게 있으며 무단 복제를 금합니다.

#방통대 2023 C 스터디 강의노트 태그 전체 글보기

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

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

구조체

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

공용체

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