Algorithm/Study

구조체

Gyuri 2022. 9. 9. 18:41

C언어 알고리즘 공부를 하기 시작하면서,

배운지 꽤 오래된 구조체, 포인터 개념 등등을 복습해보려고 한다!...

 

구조체

복잡한 객체엔 다양한 타입의 데이터들이 한데 묶여져 있다.

 

배열이 타입이 같은 데이터의 모임이라면, 

구조체 (structure)는 타입이 다른 데이터를 묶는 방법이다! C언어에선 "struct" 키워드를 이용해 표기한다.

 

구조체 형식

struct 구조체이름 {
	항목 1;
    항목 2;
    ...
};

구조체 변수는 아래와 같이 생성한다.

struct 구조체이름 구조체변수;

예) struct student s;

 


 

예로, 학생을 나타내는 구조체를 만든다고 할 때, 구조체에 저장되는 항목들은 아래와 같다.

- 문자 배열로 된 이름

- 나이 나타내는 정수값

- 평균평점 나타내는 실수값

struct student {
	char name[10]; // 문자 배열로 된 이름
    int age; // 나이 나타내는 정수값
    double gpa; // 평균 평점 나타내는 실수값
}

 

위에서 struct 다음에 오는 student는 구조체와 구조체를 구별할 수 있게 해주는 식별자로, 보통 "구조체 태그" 라고 한다.

위의 문장은 구조체 형식만은 정의한 것이고, 실제로 구조체가 만들어진 것은 아니다.

 

구조체를 생성하려면, 아래와 같이 해야한다.

struct student s;

 

 

구조체 안에 들어 있는 멤버를 사용하고 싶다면? (student 구조체 안의 이름, 나이, 평균 평점 등의 멤버..)

구조체 변수 뒤에 '.' 을 첨가 후, 항목 이름을 적으면 된다. 

'.' 을 "멤버 연산자" 라고 한다!

strcpy(s.name, "kim");
s.age = 20;
s.gpa = 4.3;

 


 

c언어에선 "typedef" 를 사용해 구조체를 새로운 타입으로 선언하는 것이 가능하다!

아래의 예에서 student 구초제는 studentStruct 라는 새로운 데이터 타입의 이름이 된다.

typedef student {
	char name[10]; 
    int age;
    double gpa;
} studentStruct;

 

이 경우엔,

새로운 데이터 타입인 studentStruct만을 사용해 변수를 선언하는 것이 가능해진다.

studentStruct s;

 

 

구조체는 중괄호를 사용해 선언과 동시에 초기화 하는 것이 가능하다

student s = { "kim", 20, 4.3 };

 

구조체를 이용한 간단한 예

#include <stdio.h>

typedef struct studentTag {
    char name[10];
    ing age;
    double gpa;
} student;

int main(void) {
    student a = { "kim", 20, 4.3 };
    student b = { "lee", 21, 4.5 };

    return 0;
}

 

'Algorithm > Study' 카테고리의 다른 글

포인터  (1) 2022.09.09