본문 바로가기
C C++/C언어 기초

C언어 - 구조체란? (구조체 정의, 구조체 변수의 초기화)

by Go! Jake 2022. 5. 5.

구조체는 하나 이상의 변수를 묶어 새로운 자료형을 만들 때 사용됩니다. '새로운 자료형'을 만든다는 게 어떤 의미가 있는 지 알아보도록 하겠습니다.

구조체의 정의

구조체는 하나 이상의 변수를 묶어서 새로운 자료형을 정의하는 도구입니다. 구조체 기반으로 새로운 자료형이 정의되며, 동일한 성격의 자료를 저장하고 관리하는 데 유용하게 쓰입니다. 예를 들어 특정 명단을 작성하고, 각 정보에 사람의 이름과 나이가 반복적으로 들어 가 있다고 보면 아래와 같이 새로운 자료형을 정의할 수 있습니다.

 

struct person {
char name[20];
int age;
};

위 자료형 정의를 설명하면 아래와 같습니다.

- struct선언 시 struct를 앞에 붙입니다.

- person은 person이라는 이름의 구조체를 정의한 것입니다.

- char name[20]과 int age는 각각 구조체 변수의 '멤버'가 됩니다.

- struct person p1; 등으로 p1이라는 구조체 변수를 선언할 수 있습니다.

 

변수 선언과 함께 사용하면 아래와 같습니다.

#include <stdio.h>
#include <string.h>

struct person {
	char name[20];
	int age;
};

int main()
{
	struct person p1;
	struct person p2;

	strcpy(p1.name,"A")	;
	p1.age = 30;

	strcpy(p2.name,"B")	;
	p2.age = 20;
	 
	printf("%s %d\n", p1.name,p1.age);
	printf("%s %d\n", p2.name,p2.age);

	return 0;
}

p1.name, p1.age, p2.name, p2.age 등으로 간편하고 통일성 있게 자료를 저장할 수 있습니다.

<구조체 변수의 이름.구조체 멤버의 이름>으로 쓰입니다.

구조체가 없었다면, 모든 변수를 일일이 선언하여야 했을 것입니다. 아래와 같이 말입니다.

#include <stdio.h>
#include <string.h>

int main()
{
	char p1_name[20];
	char p2_name[20];
	int p1_age;
	int p2_age;
	
	strcpy(p1_name,"A");
	p1_age = 30;

	strcpy(p2_name,"B");
	p2_age = 20;
	 
	printf("%s %d\n", p1_name,p1_age);
	printf("%s %d\n", p2_name,p2_age);

	return 0;
}

변수가 많아질수록 일일이 변수 선언도 해야하고, 통일성도 떨어질 수 있습니다. 관리 측면에서 구조체가 훨씬 유리합니다.

 

구조체 변수는 아래와 같이 정의하고 선언을 동시에 할 수 있습니다.

struct point {
int x;
int y;
} pos1, pos2;

pos1과 pos2라는 구조체 변수가 선언되었습니다. 자주 쓰이는 방식은 아닙니다.

구조체 변수의 초기화

구조체 변수도 선언과 동시에 초기화를 할 수 있습니다.

#include <stdio.h>
#include <string.h>

struct point {
		int xpos;
		int ypos;
	};

int main()
{
	struct point pos1 = {1,2};
	printf("%d\n", pos1.xpos);
	printf("%d\n", pos1.ypos);
	return 0;
}

출력:

1

2

 

struct point pos1 = {1,2};을 통해 point형의 pos1이라는 구조체 변수를 정의하고, pos1.xpos와 pos1.ypos의 구조체 멤버의 값도 1,2로 동시에 초기화하였습니다.

해당 내용은 윤성우 열혈 C프로그래밍을 참조하였습니다.

 

댓글