지난 포스트에서 우리는 C언어의 배열에 대해서 살펴보았습니다. 배열의 경우 같은 자료형을 연속적인 공간을 할당받아 관리할 수 있었는데요.
오늘은 구조체에 대해서 살펴보도록 하겠습니다.
구조체
필요에 의해서 서로 관련있는 데이터들을 묶어서 만든 사용자 정의 자료형입니다.
각 데이터는 메모리에 연속적으로 할당됩니다. 따라서 여러개의 임의의 자료형의 값들을 마치 하나인 것 처럼 통합하여 다룰 수 있어서 관리가 편리하다는 장점을 가지고 있습니다. 지난시간 우리가 살펴본 배열과 가장 큰 차이점은 서로 다른 자료형의 데이터를 묶을수 있다는 점과 도트연산자를 이용해 각 항목에 직접 접근이 가능하다는 점입니다.
구조체의 사용 방법
구조체는 다른 자료형과 동일하게 선언을 하고 난 뒤에 사용을 할 수 있습니다. 구조체는 사용자정의 자료형이기 때문에 가장 먼저 구조체를 정의하는 작업이 선행되어야 합니다.
구조체 정의 > 구조체 변수 선언 > 구조체 변수 사용
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 |
댓글