[C언어] 공부
5일차 공부내용
구조체, 공용체, 열거형
1. 구조체
구조체는 다양한 데이터형의 변수를 하나의 변수로 묶어준다.
struct 구조체형_이름
{
데이터_형식 멤버_변수1;
데이터_형식 멤버_변수2;
};
struct 구조체형_이름 구조체_변수;
위를 바탕으로 간단하게 활용을 해보자.
- 점수를 입력하면 성적표를 내주는 프로그램
- 실행결과
공부좀 열심히 해야겠다
구조체 변수의 다른 선언 방법
- 구조체와 변수를 동시에 선언
struct record
{
char name[10];
int kor;
int math;
int social;
float avg;
};
struct record re;
- 구조체형과 변수를 동시에 선언
struct record
{
char name[10];
int kor;
int math;
int social;
float avg;
}re;
- typedef를 이용하여 선언
typedef struct _record
{
char name[10];
int kor;
int math;
int social;
float avg;
}record;
record re; //구조체형을 굳이 길게 'struct record'라고 작성 할 필요없음
구조체 배열
구조체 변수도 일반 변수처럼 배열로 만들 수 있다.
이를 활용해서 이번엔 학생 3명의 성적표를 뽑아보자.
학생 3명의 성적표
실행결과
평균 구하는 방법이 똑같은 방법 반복이라서 반복문 안에 집어넣었는데
그렇다면 점수들도 반복문에 넣을 수 있지 않을까?
구조체 포인터
구조체 변수도 일반 변수와 마찬가지로 포인터를 사용할 수 있다.
struct record
{
char name[10];
int kor;
int math;
int social;
float avg;
};
struct record re;
struct record *p;
p = &re;
p -> kor = 100;
일반 포인터 변수를 사용할 때 포인터 변수에 실제 값을 넣으려면 '*'을 사용하는 반면,
구조체 포인터 변수의 멤버 변수에 실제 값을 접근하려면 '->' 연산자를 사용해야 한다.`
2. 공용체
공용체는 하나의 메모리를 서로 다른 두 변수가 같이 사용하는 것이다.
구조체에선 'struct'를 사용했지만 공용체는 'union'을 사용한다
union 공용체형_이름
{
데이터_형식 멤버_변수_1;
데이터_형식 멤버_변수_2;
}
union 공용체형_이름 공용체_변수;
공용체 사용 예시
실행결과
여기서 뭔가 이상한 점이 있다. 난 분명 u.tot에 300을 입력했는데 점수를 보면 321이라고 되어있다.
하지만 등급은 또 제대로 나왔다. 왜 이렇게 나오는 걸까?
현재 tot는 정수형 변수이므로 메모리 공간이 4byte가 할당 된 상태이다.
grade는 문자형 변수로 1byte의 공간이 필요하다.
공용체는 가장 크게 할당된 메모리 공간을 2개 이상의 변수가 공유하므로 이러한 결과가
나오게 된 것이다.
3. 열거형
열거형은 숫자를 나열하는 대신 특정한 기호로 대체하여 표현한 자료형이다.
'struct'도 아니고 'union'도 아닌 'enum'을 사용한다.
enum 열거형_이름
{
기호_1;
기호_2;
}
enum 열거형_이름 열거형_변수;
열거형은 개념이 살짝 다르다. 단순히 1, 2, 3등과 같은 숫자를 기호로 표현한 것이다.
열거형 사용 예시
실행결과
이처럼 열거형은 변수 이름이 아니라 데이터 값 이다.
Author And Source
이 문제에 관하여([C언어] 공부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cowberry/C언어-5일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)