본문 바로가기
컴퓨터 프로그래밍/c 언어 (c programming language)

C 언어 - 구조체(Structure)

by JaeBaek 2020. 9. 27.

 

tree cut structure (libreshot)

구조체

 구조체는 여러 자료형의 변수들을 묶어서 하나의 변수처럼 사용하게 하는 사용자 정의 자료형입니다. 기본 자료형인 int, char, float 등을 사용한 변수에는 각 자료형에 해당하는 값만을 저장하는 반면 구조체 변수는 다양한 자료형 값을 묶어서 저장합니다. 

구조체 정의 형식 struct 구조체명{
    자료형1 멤버_변수명1;
    ...;
};
구조체 변수 선언 형식 struct 구조체명 구조체변수명;

 

다음과 같이 구조체를 정의와 함께 선언을 할 수도 있습니다.

구조 정의와
변수 선언 형식
struct 구조체명{
    자료형1 멤버_변수명1;
    ...;
}구조체_변수명1, ..., ;

 

ex) 학생의 이름, 학번, 성적을 선언하는 구조체

구조체 정의 후 
변수 선언
구조체 정의와 동시에
변수를 선언
struct student {    
    char name[20];
    int id;
    int gpa;
};

struct student stu_1;
struct student stu_2;
struct sdudent {
    char name[20];
    int id;
    int gpa;
}stu_1,stu_2;

 

■ 구조체 변수 접근

 구조체 변수의 구조체 멤버 변수를 사용하기 위해서는 구조체 멤버 변수에 접근을 해야 합니다. 멤버 연산자 . 을 사용하여 구조체 멤버 변수에 접근할 수 있습니다. 구조체 멤버 변수에 접근하기 위한 기본 형식음 다음과 같습니다.

구조체 멤버
변수 접근 형식
구조체변수명.멤버명

 

구조체 변수의 초기화

 더 빠른 방법으로 구조체 변수를 선언함과 동시에 초기화하여 사용을 할 수 있습니다. 

구조체 변수
초기화 형식
struct 구조체명 구조체변수명 = {멤버_변수_초기값1, ... };

 

또한 구조체 정의, 변수선언, 초기화를 동시에 할 수도 있습니다. 하지만 구조체 멤버 변수를 초기화 할 때는

  • 구조체 멤버 변수를 초기화 할 때 초깃값의 순서는 구조체에 나열된 멤버 변수 순서와 동일해야 한다.
  • 구조체를 정의함과 동시에 구조체 멤버 변수를 초기화할 수 없다.
  • 구조체 선언을 먼저 한 다음에 {} 를 사용하여 구조체 멤버 변수를 초기화할 수 없다.

다음과 같은 내용을 주의해야 합니다. 

 

ex) 개인 신체 정보 struct 구조 사용하기

# include <stdio.h>

struct information {
	int num;
	int age;
	int height;
	int weight;
}; 

int main(void){
	struct information n1={1,20,175,65
	};
	struct information n2={2,21,180,70
	};
	
	printf("후보%d\n",n1.num);
	printf("age : %d\n",n1.age);
	printf("height : %d\n",n1.height);
	printf("weight : %d\n\n",n1.weight);
	
	printf("후보%d\n",n2.num);
	printf("age : %d\n",n2.age);
	printf("height : %d\n",n2.height);
	printf("weight : %d",n2.weight);
}

※ result
후보1
age : 20
height : 175
weight : 65

후보2
age : 21
height : 180
weight : 70

 

ex) 위의 예제를 정의와 동시에 선언하기

# include <stdio.h>

struct information {
	int num;
	int age;
	int height;
	int weight;
} n1={1,20,175,65},n2={2,21,180,70};

int main(void){
	printf("후보%d\n",n1.num);
	printf("age : %d\n",n1.age);
	printf("height : %d\n",n1.height);
	printf("weight : %d\n\n",n1.weight);
	
	printf("후보%d\n",n2.num);
	printf("age : %d\n",n2.age);
	printf("height : %d\n",n2.height);
	printf("weight : %d",n2.weight);
}

※ result
후보1
age : 20
height : 175
weight : 65

후보2
age : 21
height : 180
weight : 70

 

struct 구조체를 이용하는 방법은 상당히 중요합니다. 자료를 간결하게 만들어 줄 뿐아니라 반복되는 여러 멤버를 쉽게 정의하고 사용을 할 수 있게 만들어 주기 때문입니다. 따라서 다양한 방법으로 구조체와 익숙해지도록 해야합니다.

 

Exercise

 학생을 나타내는 구조체 student는 학번, 이름, 나이, 성적으로 구성된다. 10명의 학생 정보를 입력받아 나이가 25이하인 학생을 찾아서 출력하는 프로그램을 작성하라.

#include <stdio.h>

struct student {
	int id;
	char name[20];
	int age;
	float gpa;
};

int main(void){
	int i;
	int n=1;
	struct student s[n];
	for(i=0;i<n;i++){
		printf("학번 이름 나이 성적 순으로 입력 : ");
		scanf("%d %s %d %f",&s[i].id,&s[i].name,&s[i].age,&s[i].gpa); 
	}
	
	for (i=0;i<n;i++){
		if (s[i].age<=25)
			printf("id : %d\nname : %s\nage : %d\ngpa : %.1f\n\n",s[i].id,s[i].name,s[i].age,s[i].gpa);
	}
} 

※ result
학번 이름 나이 성적 순으로 입력 : 123456789 홍길동 23 4.0
id : 123456789
name : 홍길동
age : 23
gpa : 4.0

 

 

'컴퓨터 프로그래밍 > c 언어 (c programming language)' 카테고리의 다른 글

C 언어 - 연습문제1  (0) 2020.09.27
C 언어 - random  (0) 2020.09.27
C 언어 - 포인터(Pointer)  (0) 2020.09.27
C 언어 - 배열(Arrangement)  (0) 2020.09.27
C 언어 - 함수  (0) 2020.09.27

댓글