POST

C언어 구조체의 정의와 구조체 변수 선언과 사용법

구조체(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])는 배열의 크기를 구할때 쓰인다.