• 프로그래밍 언어 활용 part 1 - 구조체

    2021. 7. 31.

    by. 고구마달랭이

    구조체

    [학습내용] [학습목표]
    ▪ 구조체 이해
    ▪ 구조체 처리
    ▪ 구조체가 무엇인지 알고 용도를 설명할 수 있다.
    ▪ 구조체를 용도에 맞게 정의하고 선언할 수 있다.

    구조체 이해

     

    1. 구조체란?

    ▪ 사용자 정의 데이터 타입

    관련 있는 데이터를 묶어서 처리할 수 있는 자료구조

    서로 다른 데이터 타입의 묶음

    배열(Array) 구조체(Structure)

     

    서로 다른 데이터 타입을 묶어서 처리할 수 있도록 사용자가 정의하는 데이터 타입

     


     

    2. 구조체 정의방법

    ▪ 구조체의 멤버로 일반 변수 뿐만 아니라 배열이나 포인터 선언 가능

    구조체를 정의하면 새로운 데이터형이 만들어짐

    구조체 정의 → 메모리 할당의 의미는 아님

    구조체형변수선언→ 메모리에 할당

    형식 struct 구조체명 {

           데이터형 멤버명 ;
           데이터형 멤버명 ;
           ∙∙∙

    };
    예제 struct student {                         //구조체명

           char name[20];
           int num, kor, eng, mat;       //구조체의 멤버
           double average;

    };                                          //세미콜론 필수
    struct student {

    char name[20];
    int num, kor, eng, mat;                      구조체를 정의함
    double average;

    };

     

    구조체의 크기는 모든 멤버들의 크기의 합보다 크거나 같음

    구조체 멤버 중 가장 큰 멤버의 크기를 기준으로 멤버 할당(Padding)

    구조체의 크기를 구하려면 sizeof 연산자를 이용함

    struct sungjuk {
    
    char a;
    int kor ;
    
    };

    구조체 크기 구하기

     


     

    3. 구조체 선언

    구조체 형식

     

    구조체 변수를 선언하면 구조체 변수가 가진 멤버들이 메모리에 선언된 순서대로 할당됨

     

    구조체를 정의하면서 구조체 변수를 함께 선언할 수 있음

     

    구조체를정의하면서변수를함께선언할때는태그명을생략할수있음

    구조체 처리

     

    1. 초기화

    선언 시 초기화는 배열 초기화와 동일

    { } 안에 멤버들의 초기값을 순서대로 나열

    { } 안에 지정한 초기값이 멤버의 개수보다 부족하면 나머지 멤버들은 0으로 초기화

     

    멤버 접근 연산자 “.”을 이용한 초기화 가능

     

    같은 구조체형의 변수들끼리는 서로 초기화나 대입이 가능함

    구조체 간의 초기화 : 멤버 대 멤버 초기화 (동일한 멤버 간에 1:1로 복사해서 초기화)

    구조체 간의 대입 : 멤버 대 멤버 대입

    struct point {
    
    	int x;
    	int y;
    
    };
    
    struct point p1 = {10, 20};
    struct point p2 = {30, 40};
    struct point p3 = p1;			//구조체 간의 초기화
    struct point p4;
    p4 = p2; 				//구조체 간의 대입

     


     

    2. 구조체 응용

    구조체 멤버

    ▪ 구조체를 다른 구조체의 멤버로 사용 가능

    struct student {
    
    	char *name;
    	int num;
    	int age;
        
    };
    
    struct sungjuk {
    	struct student stud;
    	int kor, eng;
    	double avg;
        
    };
    
    struct sungjuk m2 = { {“hong kildong”, 20200001, 27}, 95,87};
    printf(“ 학번 : %d”, m2.stud.num);

     

    구조체 배열

    ▪ 구조체를 배열로 선언하는 것이 가능

    struct sungjuk {
    
    char name[20];
    int kor, eng;
    double avg;
    
    };
    
    struct sungjuk m[50];			// 50명 학생의 성적을 처리

     

    구조체 포인터

    ▪ 구조체 포인터를 선언하는 것이 가능

    struct sungjuk {
    
    char name[20];
    int kor, eng;
    double avg;
    
    };
    
    struct sungjuk m2={ “hong”, 95, 87 };
    struct sungjuk *ps = &m2;

     

    구조체 포인터로 구조체의 멤버에 접근할 때는 “->”간접 접근 연산자를 사용

    struct sungjuk {
    
    char name[20];
    int kor, eng;
    double avg;
    
    };
    
    struct sungjuk m2={ “hong”, 95,87 };
    struct sungjuk *ps = &m2;
    
    m2.kor = 92;
    ps -> kor = 92;

     

     

     


     

     

    학습정리

     

     

    1. 구조체 이해

    ▪ 구조체는 서로 다른 데이터를 묶어서 처리하기 용이한 자료구조임

    ▪ 구조체는 먼저 정의하고 변수를 선언하여 사용함

    구조체 선언 시 구조체명 앞에 struct라는 키워드를 사용해야 함

    구조체 변수는 모든 데이터 타입을 사용할 수 있음

     

    2. 구조체 처리

    ▪ 구조체는 선언 시 초기화하는 것이 가능함

    선언 시 초기화에는 배열과 동일한 방법으로 초기화함

    구조체도 필요에 따라 구조체 배열을 선언하는 것이 가능함

    구조체 포인터로 구조체 멤버에 접근할 때는 간접 접근 연산자 ->를 사용함

     

    댓글