Always Be Wise

구조체란? 본문

프로그래밍 언어/C

구조체란?

bewisesh91 2021. 12. 4. 13:51
728x90

구조체란 하나 이상의 변수를 묶어서 좀 더 편리하게 사용할 수 있도록 도와주는 도구를 의미한다.

자료형이 다른 변수를 사용하기 위해서는 하나하나 선언할 필요가 있다. 그런데 똑같은 구조의 변수를 여러번 사용해야 하는 경우

이는 굉장히 비효율적이다. 구조체는 새로운 자료형을 만드는 것과 같다고 할 수 있기 때문에, 보통 main 함수 전에 선언한다. 

어떤 함수 안에 선언하면 그 함수 안에서만 사용할 수 있기 때문에 만약 main 함수 안에 선언한다면 main 함수 안에서만 사용할

수 있다. 구조체의 기본적인 형태는 아래와 같다.

struct 구조체 이름 
{ 
	구조체 멤버들 
 };

이렇게 선언하는 것만으로는 구조체를 바로 사용할 수 없고, 아래와 같이 main 함수 안에서 따로 선언을 해주어야 한다. 선언 시에는

struct로 선언했던 구조체의 이름과 앞으로 사용할 변수 이름을 써주면 된다. struct [구조체 이름] 까지가 int와 같은 자료형이라고

할 수 있다.

#include <stdio.h>

struct student
{
	char name[15];
	int s_id;
	int age;
	char phone_number[14];
};

int main()
{
	struct student goorm;
	
	printf("이름 : ");
	scanf("%s", goorm.name);
	printf("학번 : ");
	scanf("%d", &goorm.s_id);
	printf("나이 : ");
	scanf("%d", &goorm.age);
	printf("번호 : ");
	scanf("%s", goorm.phone_number);
	
	printf("이름 : %s, 학번 : %d, 나이 : %d, 번호 : %s\n", goorm.name, goorm.s_id, goorm.age, goorm.phone_number);
	
	return 0;
}

위 코드에서 main 함수 안에 struct student goorm으로 선언하였다. 이렇게 되면 goorm의 자료형은 student 구조체가 된다.

선언한 후에는 구조체 멤버를 사용할 수 있다. 사용할 때에는 [변수이름.구조체 멤버의 이름]과 같은 형태로 작성하면 된다. 

구조체 멤버의 값을 main에서 선언할 때 대입해서 초기화 할 수 있다. 초기화 할 때에는 멤버 연산자 .과 중괄호를 사용한다.

구조체는 배열처럼 멤버 전체를 초기화 할 수도 있고, 원하는 변수만을 초기화할 수도 있다. 아래 코드에서처럼 초기화 할 때에는

{.멤버이름 = 값}과 같은 형태로 초기화 할 수도 있으며, 멤버 이름을 적지 않고 초기화 할 수도 있다. 멤버 이름을 적지 않을 때는

구조체를 정의했던 순서대로 값이 들어간다. 또한 값을 넣어주지 않은 멤버는 0으로 초기화 된다.

#include <stdio.h>

struct student
{
	int age;
	char phone_number[14];
	int s_id;
};

int main()
{
	struct student goorm = { .age = 20, .phone_number = "010-1234-5678", 10 };
	struct student codigm = { 22, "010-8765-4321"};

	printf("나이 : %d, 번호 : %s, 학번 : %d\n", goorm.age, goorm.phone_number, goorm.s_id);
	printf("나이 : %d, 번호 : %s, 학번 : %d\n", codigm.age, codigm.phone_number, codigm.s_id);

	return 0;
}

'프로그래밍 언어 > C' 카테고리의 다른 글

구조체 배열  (0) 2021.12.04
typedef를 이용한 구조체 선언  (0) 2021.12.04
이중 포인터와 포인터 배열  (0) 2021.12.04
상수 포인터  (0) 2021.12.04
포인터 연산과 배열  (0) 2021.12.04
Comments