본문으로 건너뛰기

다양한 자료형의 개념 및 특징

기본 자료형

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;