[C언어] 6. 구조체와 사용자 정의 자료형
제가 책(윤성우의 열혈 C 프로그래밍)을 보다가 까먹었던 부분만 포스팅 하는 것입니다!
순서가 뒤죽박죽이어도 이해해주세요~~!
구조체 변수의 초기화
구조체 멤버에 문자열이 있다고 하면,
초기화 과정에서는 문자열 저장을 위해서 strcpy함수를 호출하지 않아도 됩니다!
구조체 변수의 주소 값과 첫 번째 멤버의 주소 값
구조체 변수 이름의 주소 값은 구조체 변수의 첫 번째 멤버의 주소 값과 동일합니다.
typedef 선언
typedef 선언은 기존에 존재하는 자료형의 이름에
새 이름을 부여하는 것을 목적으로 하는 선언입니다.
typedef int INT; //int의 또 다른 이름 INT를 부여
typedef struct point
{
int x;
int y;
}Point; //구조체 자료형 struct point에 Point라는 이름을 부여!
typedef struct
{
int x;
int y;
}Point; //구조체의 이름도 생략가능합니다~
보통 typedef로 정의되는 자료형의 이름은 대문자로 시작하는 것이 관례입니다~
함수로의 구조체 변수 전달과 반환
함수의 인자로 구조체 변수가 전달될 수 있으며,
전달되는 구조체의 값은 매개변수에 통째로 복사가 됩니다~
(Call-by-value)
구조체의 멤버로 배열이 선언되어도 역시 복사가 진행됩니다~!
구조체를 Call-by-referenc 형태로 호출하고 싶다면,
구조체의 포인터 변수를 이용하여야 합니다!
구조체 변수를 대상으로 가능한 연산
//구조체 변수에 허용되는 가장 대표적인 연산은 대입연산입니다~
#include <stdio.h>
typedef struct
{
int x;
int y;
}Point;
int main(void)
{
Point pos1={1,2};
Point pos2;
pos1=pos2; //pos1의 멤버가 pos2의 멤버로 복사가 됩니다!
return 0;
}
공용체(Union Type)의 정의와 의미
공용체(union)의 선언은 다음과 같습니다.
typedef union //공용체 ubox의 정의
{
int mem1;
int mem2;
double mem3;
}UBox;
공용체 변수가 선언되면, 공용체를 구성하는 멤버는 각각 할당되지 않고,
그 중 가장 큰 멤버의 변수만 하나 할당되어 이를 공유하게 됩니다~!
공용체의 유용함은 다양한 접근방식을 제공하는데 있습니다.
예를 들어, 어떤 수를 다양한 자료형으로 출력가능합니다.
#include
typedef union //Ubox를 선언
{
int num;
char ch[4];
}Ubox;
int main(void)
{
Ubox ub;
ub.num=1234123; //ub의 멤버 num에 1234123을 저장
//num와 ch는 공유하고 있기에 다음과 같이,
//1234123의 상위 1바이트의 아스키코드 출력이 가능합니다.
printf("%c",ub.ch[0]);
return 0;
}
열거형(Enumerated Type)의 정의와 의미
열거형은 변수에 저장이 가능한 값들을 열거하여 정의가 가능합니다~
예를 들어 syllable이라는 변수에 1,2,3,4,5,6,7이 저장 가능하다고 한다면,
typedef enum
{
Do=1, Re=2, Mi=3, Fa=4, So=5, La=6, Ti=7
}Syllable;
그러면 이러한 연산이 가능합니다~
int main(void)
{
Syllabe tone;
for(tone=Do; tone<=Ti, tone++)
printf("%d",tone);
}
//다시 말해서 저장할 상수들을 의미있는 이름으로 정의하는 것이 가능합니다~