본문 바로가기
IT/C

C언어 구조체

by -_-* 2021. 1. 14.
반응형

지난 포스트에서 우리는 C언어의 배열에 대해서 살펴보았습니다. 배열의 경우 같은 자료형을 연속적인 공간을 할당받아 관리할 수 있었는데요. 

 

c언어 배열

지난 포스트에서 우리는 C언어 프로그램의 흐름을 제어할 수 있는 조건문, 반복문, 그리고 분기문을 살펴보았습니다. 오늘은 C언어 배열을 살펴보도록 하겠습니다. 배열이란, 메모리 공간에 같

bono0933.tistory.com

 

오늘은 구조체에 대해서 살펴보도록 하겠습니다. 

 

구조체

필요에 의해서 서로 관련있는 데이터들을 묶어서 만든 사용자 정의 자료형입니다. 

각 데이터는 메모리에 연속적으로 할당됩니다. 따라서 여러개의 임의의 자료형의 값들을 마치 하나인 것 처럼 통합하여 다룰 수 있어서 관리가 편리하다는 장점을 가지고 있습니다. 지난시간 우리가 살펴본 배열과 가장 큰 차이점은 서로 다른 자료형의 데이터를 묶을수 있다는 점과 도트연산자를 이용해 각 항목에 직접 접근이 가능하다는 점입니다. 

 

구조체의 사용 방법

구조체는 다른 자료형과 동일하게 선언을 하고 난 뒤에 사용을 할 수 있습니다. 구조체는 사용자정의 자료형이기 때문에 가장 먼저 구조체를 정의하는 작업이 선행되어야 합니다. 

 

구조체 정의 > 구조체 변수 선언 > 구조체 변수 사용 

 

 

1. 구조체 정의 

struct 구조체명 
{
    구조체멤버자료형 구조체멤버이름 ; // 구조체멤버 선언문
    ....
};

구조체를 정의하는 키워드는 struct 에 의해 가능합니다. 구조체에서 사용되는 데이터들을 구조체멤버라고 부릅니다. 

구조체멤버를 정의할때 각 구조체 멤버의 자료형이 다르기때문에 반드시 구조체멤버의 자료형과 구조체멤버의 이름을 식별자규칙에 의해 정해줍니다. 구조체 멤버는 중괄호 {} 를 통해 묶어주고 마지막에 ; 세미콜론으로 정의를 마칩니다. 

 

2. 구조체 변수 선언 

구조체를 정의했다면, 구조체를 이용하기 위해서 구조체를 자료형으로 하는 변수를 선언하면 됩니다. 

 

struct 구조체명 변수명 ; 

사용할 자료형이 구조체임을 알리는 키워드 struct를 작성하고 앞서 우리가 구조체정의에 사용한 구조체명을 붙여줍니다. 그리고 우리가 이 구조체를 변수로 가질 때의 변수명을 식별자 정의 규칙에 의해 작성해주면 됩니다. 

 

 

struct fruit 
{
    char name[20]; 
    int price ; 
    char color[20]; 
} ; 

struct fruit apple1, apple2;

예를 들면 다음과 같이 과일에 관련된 데이터를 구조체로 묶어서 fruit 라고 정의하고, fruit 를 이용하여 변수 apple1, apple2를 선언할 수 있습니다. 

 

 

다음과 같은 방법으로 구조체를 정의와 선언을 동시에 할 수도 있습니다.

struct fruit
{
    char name[20]; 
    int price ; 
    char color[20];   
} apple1, apple2; 

 

3. 구조체 초기화 

구조체 역시 자료형이기 때문에, 구조체 변수를 선언했다면 반드시 초기화 후 사용해야 합니다. 

구조체 변수를 선언과 동시에 값을 지정해주는 것을 우리는 구조체 초기화라고 합니다. 

위의 fruit 구조체를 사용하면 다음과 같이 초기화 해줄 수 있습니다. 

struct fruit apple1 = {"apple",1000,"red"};
struct fruit apple2 = {"apple",800,"green"};
struct fruit
{
    char name[20]; 
    int price ; 
    char color[20];   
} apple1= {"apple",1000,"red"};

 

도트연산자를 이용한 구조체 멤버참조

구조체변수명.구조체멤버명

도트연산자를 이용해서 구조체멤버에 직접접근을 할 수 있습니다. 

예를 들면 struct apple1.price = "1000"; 과 같이 사용이 가능합니다. 

문자열의 경우 문자열 함수로 처리할 수 있습니다. 

예를 들면 strcpy(apple2.color, "green");의 형태로 사용을 할 수 있습니다. 

 

구조체 예제 코드

위에서 살펴본 구조체에 대한 예제코드는 아래와 같습니다. 

#include <stdio.h>

 

int main(void) {

 

struct fruit

{

char name[20];

int price;

char color[20];

}; // 구조체 정의

 

struct fruit apple1 = {"apple",1000, "red"};

struct fruit apple2 = {"apple",800, "green"};

struct fruit banana = {"banana",2000, "yellow"}; //구조체 변수 선언 및 초기화 



// 도트연산자에 의한 구조체 멤버 직접접근

printf ("과일이름 \t 가격 \t 색상 \n" );

printf ("%s \t\t %d \t %s \n", apple1.name, apple1.price, apple1.color );

printf ("%s \t\t %d \t %s \n", apple2.name, apple2.price, apple2.color );

printf ("%s \t\t %d \t %s \n", banana.name, banana.price, banana.color );

 

return 0;

}

 

위에서 설명한 내용을 바탕으로 예제 코드를 작성해보았습니다. 

먼저 fruit이라는 구조체를 정의하는데 구조체멤버로는 과일이름인 name, 과일가격인 price, 과일의 색상인 color 를 가집니다.

 

구조체 변수를 선언과 동시에 초기화 해주었습니다. 구조체 변수로 apple1, apple2, banana  3개를 각각 선언하고 초기값을 지정해줬습니다. 

 

마지막으로 표준출력함수 printf()에 의해 출력할 때 도트연산자를 이용하여 구조체변수가 가지고 있는 구조체멤버에 직접접근해서 가져옵니다.  

 

이 예제 코드의 실행결과는 다음과 같습니다. 

 

오늘은 구조체는 다양한 자료를 묶어서 사용하는 사용자정의 자료형임을 알 수 있었습니다. 구조체를 정의하는 법, 구조체변수를 선언하고 초기화하는법, 그리고 도트연산자를 이용해 구조체변수의 구조체멤버에 접근하는 방법을 알아보았습니다. 다음 포스트에서는 공용체와 열거형에 대해서 알아보도록 하겠습니다. 

 

 

반응형

'IT > C' 카테고리의 다른 글

C언어 포인터  (0) 2021.01.21
C언어 공용체, 열거형 , 형정의  (0) 2021.01.16
c언어 배열  (0) 2021.01.13
C언어 분기문 break /continue /goto / return  (0) 2021.01.12
C언어 반복문  (0) 2021.01.11

댓글