Programming Language/C/C++

[C/C++] 구조체 struct

깐요 2017. 2. 25. 17:20

구조체란?

C언어 문법을 배울 때 배열에 대해서 공부한 기억이 있을 것이다

배열은 같은 타입의 변수들의 집합이라고 할 수 있다

그렇다면 타입이 다른 변수들은 어떻게 묶을까?


구조체(structure)는 다른 타입의 변수들의 집합이라고 할 수 있다

구조체를 사용하는 방법은 다음과 같다


//구조체를 정의하는 방법
struct person {
  char name[10];
  int age;
  float height;
  ...
};
 
//구조체 변수를 선언하는 방법
struct person a;

보시다시피 person 이라는 구조체의 내부에는

char 문자열과 int형 변수 float형 변수 등 서로 다른 타입의 변수들이 묶여있음을 확인할 수 있다



그리고 typedef 를 사용하면 구조체를 아예 새로운 타입으로 선언할 수 있다


//구조체를 정의하는 방법
typedef struct person {
  char name[10];
  int age;
  float height;
  ...
} person;
 
//구조체 변수를 선언하는 방법
person a;

struct person 으로 선언해주었던 방식이 person 으로 더 간단하게 선언할 수 있게 되었다



구조체에는 또 다른 구조체를 포함할 수도 있다


typedef struct person {
  char name[10];
  int age;
  float height;
  struct birthday;
} person;
 
struct birthday
{
  int day;
  int month;
  int year;
};


구조체의 내용은 어떻게 다룰까?

구조체를 만들었다면 내용도 채워주어야 한다

그러기 위해서는 구조체 내부의 변수들에 접근해주어야 하는데

이때 항목연산자(membership operator), '.' 을 사용한다


strcpy(a.name, "tom");
a.age = 20;
a.height = 180.5;

strcpy(변수, "문자열 내용");

을 이용해야 한다.

strcpy 명령문은

#include <string.h> 를 이용하여 헤더 파일을 불러와야 사용가능합니다

_M#]


구조체 변수는 대입 연사자를 사용하여 같은 내용의 구조체를 만들 수 있다

하지만 비교 연산자를 사용할 시에는 컴파일 오류가 발생한다

구조체의 내용을 비교하기 위해서는 항목 연산자를 사용하여 데이터끼리 비교해야 한다


320x100

'Programming Language > C/C++' 카테고리의 다른 글

[C/C++] strlen 함수, 문자열의 길이  (0) 2017.04.20
[C/C++] fflush 함수  (0) 2017.03.10
[C/C++] 동적 메모리 할당 malloc  (0) 2017.02.27
[C/C++] 포인터 pointer  (0) 2017.02.26
[C/C++] 순환, 재귀 호출  (0) 2017.02.19