본문 바로가기

2학년/C

[C]사용자 지정타입(1)

구조체

사용자가 C언어에 있는 기본 타입을 조합함으로써 새롭게 정의한 사용자 정의 데이터 타입을 말한다. 

예로 들어, 우리가 "회원가입"을 구현한다고 생각해보면, 회원 1명은 이름, 연락처, 생년월일, 등급, 나이, 포인트 등의 정보를 갖는다고 정의해보자. 그렇다면 회원 1명을 선언할 때마다 이에 대한 선언문을 일일이 다 추가해야한다. 똑같은 기능을 가진 코드를 계속 선언해주어야하기 때문에 상당히 비효율적으로 느껴진다. 이럴 때 "구조체 키워드" 를 통해 "user"라는 구조체 타입을 선언함으로써 해결할 수 있다. 

#include <stdio.h>

struct 원하는 이름 {
	자료형 멤버변수1;
    자료형 멤버변수2;
    ...
};

   struct 키워드를 사용한 후, 희망하는 식별자명을 기재하면 해당 자료형의 구성요소를 블록 내부에 선언할 수 있다.  struct을 통한 사용자정의 자료형은 컴파일로부터 '선언'을 담당하므로, 마지막에 세미콜론이 추가되어야 한다.

 

example_ 2D (2차원상의 좌표를 저장할 수 있는 자료형 선언) 

#include <stdio.h>

struct 2D {
    int x;
    int y;
};

struct 키워드를 사용한 후 별칭을 지정해주지 않으면, 실제 자료형의 이름은 "struct 2D"가 된다. 

int main(void) {

   struct 2D point = {1,2};
   printf("x : %d , y  :%d",point.x,point.y);

>>> x : 1 , y : 2 

 *구조체 변수의 멤버변수는  구조체변수명.멤버변수명 으로 참조될 수 있다. 

 

한편, 구조체 선언부 끝에 변수명 기입시 정의와 동시에 변수 선언이 가능하다. 

#include <stdio.h> 

int main(void) {
    struct 2D {
       int x;
       int y; 
    }p1,p2,p3; 
  
    p1.x =5;
    p2.y =1;
    p3.x= 2;
}

** typedef 키워드 활용 

  typedef 키워드는 본래 데이터 타입에 별명을 붙이기 위하여 사용하는 키워드이다. 

  ex) typedef int cs_student; 

        cs_student Irene = 3; 

        printf("%d", Irene); 

    >>> 3

 

 cs_student 식별자는 typedef 키워드를 통해 int라는 자료형을 의미하는 "별명"이 되었음을 보여준다. 

 구조체를 정의와 함께 구조체의 별명을 지정함으로써, 일일이 struct를 붙이지 않아도 된다.

 ex) typedef struct 2D {   

                 이하 동일; 

       } point ; //struct 2D의 별명이 point로 지정 

      point p1 = {5,4}; //가능

typedef의 경우, 2D 구조체명을 생략할 수 있다.  ex) typedef struct { ~~ } point; 

 

 

      

 

'2학년 > C' 카테고리의 다른 글

[C]함수(1)  (0) 2023.07.30
[C]사용자 지정 타입  (0) 2023.07.29
[C]배열(2) + 동적할당  (0) 2023.07.27
[C]배열(1)  (0) 2023.07.26
[C]포인터(2)  (0) 2023.07.25