728x90

여러개의 값을 담을때는

 

여러개의 int a , int b , int c가 아닌 

배열을 통해 같은 자료형의 배열을 만들어 값을 여러개 담을수있습니다.

 

그러나 하나의 자료형이아닌 

학생에대한 정보를 담은 배열을 만들려고하면

학생의 이름(문자열)

학생의 나이(정수)

학생의 학년(정수)

학생의 성적(문자)

 

등 한명의 학생에 대한 정보를 저장하기위해 4가지의 다른 type들이 필요한데

이럴때 배열이아닌 구조체를 이용합니다.

 

< 구조체 형식 >

struct 구조체이름 { 자료형 멤버이름; };

 

먼저 struct 키워드 뒤에 구조체 이름을 지정해주고 { } (중괄호) 안에 변수를 선언합니다. 이렇게 구조체 안에 들어있는 변수를 멤버라고 합니다. 그리고 구조체를 정의할 때 } (닫는 중괄호) 뒤에는 반드시 ; (세미콜론)을 붙여줍니다.

 

구조체(Structure)

 

구조체라는 것은 하나이상의 변수(포인터 변수와 배열 포함)를 묶어서 새로운 자료형을 정의하는 도구이다. 즉 구조체를 기반으로 우리는 새로운 자료형을 정의 할 수 있다.

자바를 먼저 배웠다면 이 구조체는 자바의 객체 사용방법과 흡사하다.

 

구조체를 정의 하는 방법은 아래와 같다.

ex)

struct person { // person이라는 이름의 구조체 정의

int num; // 정수 저장용 멤버

char str[30]; // 문자열 저장용 멤버

};

 

위에서 person이라는 이름의 자료형이 만들어졌다. 그렇다면 이제 이 자료형의 변수를 만들어 주어야한다.

ex)

struct person simson;

위의 예시를 보면 알겠지만 맨앞에 struct선언을 추가해야하며, 이어서 구조체의 이름과 구조체 변수의 이름을 선언 해야한다.

여기서 구조체 변수의 이름은 simson이다.

구조체 변수는 당연히 아래처럼 배열로도 선언이 가능하다.

ex)

struct person simson[2];

 

구조체 변수의 멤버에는 int형의 변수num과 char형의 배열 str이 존재하는데 이 둘을 사용 할 때에도 일반적인 방법과는 조금 다른다. 

ex)

simson.num

simson.str

 

이처럼 구조체 변수를 앞에 입력후 점(.)을 찍고 멤버 변수의 이름을 적어사용한다.

 

아래의 간단한 코드를 작성하여 보자

#include<stdio.h>

#pragma warning(disable:4996) // scanf 보안 경고 제거용

 

struct person {

int num;

char str[30];

};

 

int main(void) {

int i;

struct person simson[2];

for (i = 0; i < sizeof(simson)/sizeof(simson[1]); i++) {

printf("이름 입력: ");

scanf("%s",simson[i].str);

simson[i].num = i;

}

for (i = 0; i < sizeof(simson) / sizeof(simson[1]); i++){

printf("========\n%d 번째 이름: ", simson[i].num+1);

printf("%s \n", simson[i].str);

}

return 0;

}

 

 

 

여기서 sizeof(simson)/sizeof(simson[i])는 배열의 크기를 구할때 쓰인다.

728x90

+ Recent posts