다양한 자료형의 개념 및 특징
기본 자료형
c 언어에서 기본적으로 사용되는 자료형
int, char, double, float
- int : 4byte의 정수 저장
- char : 1byte의 문자 저장
- float : 4byte의 실수 저장
- double : 8byte의 실수 저장
사용자 정의 자료형
기본 자료형으로부터 유도되거나 사용자가 직접 만드는 자료형
- 포인터
- 배열
- 구조체
- 공용체
- typedef
- 열거체(enum)
포인터
- 주소를 저장하는 변수
int *ptr;
과 같이 사용함- 포인터 변수와, 포인터 변수가 참조하는 변수는 자료형이 같아야 함
int *ptr;
int i = 10;
ptr = &i
배열
- 동일한 자료형의 데이터를 연속으로 저장함
int a[10] = {0};
과 같이 사용함- 배열을 참조하여, 배열과 같이 사용할 수 있음
int a[10] = {0};
int *ptr;
ptr = a;
// 배열형태로 데이터 대입하기
a[0] = 1;
ptr[1] = 2;
// 포인터로 데이터 대입하기
*(a+2) = 3;
*(ptr+3) = 4;
구조체
{중괄호}
를 사용하여 맴버 변수를 사용함- 서로 다른 자료형을 맴버로 지정이 가능함
- 보통 main 함수 이전에 선언함
#include <stdio.h>
struct user {
int id;
char name[30];
}
int main(void) {
struct user u1 = {1, "lee hyoloui"};
// u1.id
// u1.name 으로 맴버 접근
printf("id=%d, name=%s\n", u1.id, u1.name)
return 0;
}
공용체
- 구조체와 유사항
- 같은 메모리 영역을 여러 개의 변수가 공유하는 형태임
- 보통 main 함수 이전에 생성함
#include <stdio.h>
union user {
int id;
char a;
}
int main(void) {
union user u1;
u1.id = 1;
u1.name = 'a';
printf("id=%d, a=%c\n", u1.id, u1.a)
return 0;
}
실행 결과:
id = 97, a=a
- 메모리를 같이 사용하기 때문에 id는 a에 할당한 'a'의 아스키코드 값인 97 로 출력 된다
typedef
- 이미 존재하는 자료형의 별명을 정의함
- 형을 정의하는 문장이므로 세미콜론(;)이 필요
typedef int integer;
typedef char aaa;
integer i = 1;
aaa grade = 'A';
enum(열거체)
- 괄호 안에 연속적으로 값을 저장하는 자료형
- 특별한 지정이 없는 경우 0부터 시작, 자동으로 1씩 증가
- C/C++은 enum으로 데이터 열거가 가능
enum week{ sun, mon, tues, wed, thur, fri, sat } // { 0, 1, 2, 3, 4, 5 }
enum week test;
test = fri;
- enum : 열거체 정의하는 키워드
- week : 열거체의 이름(태그)
{ sun, mon, tues, wed, thur, fri, sat }
: 기호 상수
#include <stdio.h>
int main(void){
enum dept {sw, comp, hacking};
char *dept2[] = {"sw", "comp", "hacking"};
enum dept dept3;
dept3 = sw;
printf("%d번째 학과는 %s 입니다.\n", dept3, dept2[dept3]);
return 0;
}
실행 결과 : 0번째 학과는 sw 입니다.
사용자 정의 자료형 - 특징
추상화
복잡한 문제에 대하여 세부적이고 복잡한 내용은 배제하고, 중요한 부분을 중심으로 간략화 함
- 기능 추상화
- 입력 => 출력의 변환 과정 추상화
- 자료 추상화
- 자료 및 오퍼레이션을 함께 정의
- 제어 추상화
- 외부 이벤트 반응 추상화
상속
- 상위그룹의 모든 특성이 하위그룹에게 전달되어 재사용 또는 확장
- 활용
- 빅데이터 분석, JAVA, C
구조체의 개념 및 활용
구조체의 개념
서로 다른 자료형을 하나의 이름으로 묶어 처리 가능하도록 하는 것
- 특징
- 배열과는 다름
{중괄호}
를 이용하여 맴버를 묶어 처리함
구조체 : 서로 다른 자료형
struct user{
int id;
char name[30];
int level;
}
기본자료형, 배열 : 동일한 자료형
int i;
int a[10];
구조체 변수
- 구조체를 자료형으로 갖는 변수
구조체
struct user{
int id;
char name[30];
int level;
}구조체 변수
int i;
int a[10];
구조체 생성
struct user{
int id;
char name[30];
int level;
}
구조체 상세 구분
구분 | 내용 |
---|---|
struct | 구조체 정의 키워드 |
user | 구조체 이름 |
int id | 구조체 맴버 |
char name[30] | ,, |
int level | ,, |
}; | 구조체 끝, 세미콜론 |
구조체 맴버
- 구조체 안의 다양한 자료형을 맴버로 가질 수 있음
- 구조체를 맴버로 가질 수 있음
- 구조체 배열이 가능함
구조체 생성 - 초기화
// 1. 일반 구조체 변수 u1
struct user u1 = {1, "kim"};
// 2. 구조체를 포함한 구조체 변수 u1
struct user u1 = {{2020, 12, 30}, 1, "kim"};
// 3. 일반 구조체 배열 u1
struct user u1[5] = {
{1, "kim"},
{2, "jung"},
{3, "hong"},
{4, "hwang"},
{5, "oh"},
}
구조체의 초기화
방법 1
struct data test;
test.month = 5;
test.day = 31;방법 2
struct data test = {5, 31};
구조체의 배열
struct data{
int month;
int day;
}
struct data test[3];
test[0].month=5;
test[0].day=1;
test[1].month=5;
test[1].day=2;
test[2].month=5;
test[2].day=3;
구조체와 포인터
struct data{
int month;
int day;
}
struct data test = {5,1};
struct data *ptr;
ptr = &test;