반원 블로그

[C 프로그래밍] 구조체_1.기본이론 본문

2017/C 프로그래밍

[C 프로그래밍] 구조체_1.기본이론

반원_SemiCircle 2017. 2. 26. 16:27

▶1. 구조체?
프로그래밍에는 int, char와 같은 기본자료형이 있다. 좀더 큰 범주로 보면 자료형에 속하며 자료형에는 앞서 말한 기본자료형, 유도 자료형이 있다. 우리가 흔히 쓰는 배열, 포인터도 유도 자료형에 속한다. 다음 그림을 보자


유도 자료형은 기본 자료형을 응용해서 좀 더 복잡한 자료를 구현하기위해 지원된다.
같은 자료형을 계속 연결되있는 형태인 배열을 생각하면 편할 것이고, 포인터는 동적배열이 가능한 것을 생각하면 이해하는데 도움이 될 것같다. 이러한 유도 자료형중 오늘은 구조체에 대해 알아보자.

▶2. 여러 데이터 타입을 하나로 묶을 수 있는 구조체 struct
구조체를 이용하면, 여러 종류의 변수를 하나로 묶어서 사용할 수 있다.
신체검사지를 무슨 네용이 적혀있을지 생각해보자. 이름, 나이, 키, 몸무게 등 여러 수치들이 적혀있을 것이다. 이 정보를 프로그래밍에서 이 정보를 어떻게 저장해야할까? 또한 여러사람의 신체검사지는 어떻게 저장하고 관리해야될까? 구조체를 쓰면 쉽게 구현할 수 있다.



구조체는 여러 종류의 변수를 하나로 묶어서 사용하며, 윗 사진처럼 사용자가 단위 또는 범위를 정하여 여러 데이터를 담을 수 있는 형태를 가지고 있다. 

구조체는 함수 선언처럼 void main 상단에 미리 형태를 구상해서 써놓는다.


#include <stdio.h>

//구조체 선언위치
struct profile{
  char* name;
  int age;
  double height;
  double weight;
};

void main(){
  .....
}

▶3.구조체 사용방법

기본 사용 방법은 다음과 같다. 위에 정의한 profile구조체를 통해 예시를 들어보자
//구조체 정의 방법
struct 구조체이름 구조체변수 이름;
struct profile p1;
//구조체 필드에 접근 하는 방법
구조체변수.필드이름;
p1.name;
p1.height;

그런데 구조체는 보통 여러 데이터를 저장하기위해 단위로 만든 것이라서 단독사용은 쓰이는 곳이 별로 없다. 

대부분 동적배열, 연결리스트를 이용하여 관리하기때문에 구조체 포인터 변수를 사용한다.


struct profile *p1;
(*p1).weight;//몸무게 값에 접근
p1->weight;// 앞에 *과 .을 줄여서 -> 로 한다. 윗 줄과 같은 작동을 한다.

(*p1).weight는 p1->weight와 같다는 것을 기억하자.


▶4. 다음 포스팅에서 이 구조체를 실습하며 공부하자.



Comments