티스토리 뷰

1. 구조체

 

 

정의

  1. 구조체는 서로 관련 있는 여러 자료형의 변수들을 묶어서 만든 새로운 자료형이다.
  2. 구조체는 main() 함수 위의 전역 위치에 다음 형식으로 정의한다.
struct 구조체명 {
           자료형1 변수명1;
           자료형2 변수명2;
           자료형3 변수명3;
        . . .
};

멤버 4개 가진 GameInfo 라는 구조체

 

  3. C언어에 내장된  int, float, double, char 등 기본 자료형과 달리 구조체는 이름과 멤버를 사용자가 직접 정의할 수 있기 때문에 사용자 정의 자료형(UDT, User-defined Data Type) 이라고 한다.

 

 


 

 

선언

 

 

  1. 정의된 구조체를 사용하려면 구조체 변수를 선언해야한다. 구조체 변수는 배열처럼 중괄호를 사용해 한꺼번에 값을 초기화 할 수 있다.

struct  구조체명 구조체변수명 = { 값1, 값2, ... };

 

 

2. 구조체 멤버에는 마침표(.)를 사용해 변수명, 멤버명과 같은 형식으로 접근한다.

변수명.멤버명 = 값;

 

 

3. 구조체도 배열처럼 중괄호를 사용해 값을 한꺼번에 초기화 할 수 있다.

 

중괄호 안에 쉼표로 구분한 멤버의 값을 순서대로 작성

 

 

 

 

 

 

 

 

2. 구조체 배열과 구조체 포인터

 

  1. 일반 배열과 마찬가지로 구조체 배열도 만들 수 있다.
struct 구조체명 배열명[배열크기];

 

 

  2. 구조체 포인터는 (*구조체변수명) .멤버 또는 구조체변수명 -> 멤버와 같은 형식으로 값에 접근할 수 있다.

struct 구조체명 * 변수명;

 

구조체 포인터 gamePtr을 선언하고 구조체 변수 gameInfo1의 주소를 담고 있는 구조체 포인터가 된 모습

 

일반적으로 포인터 변수가 가리키는 int형 변수의 값을 나타낼 때 포인터 변수 앞에 별표를 붙여 *ptr로 작성한다.

prt은 int형 변수의 주소를 담고 있는데, 그 앞에 별표를 붙임으로써 가리키는 주소에 저장된 값을 나타낸다.

구조체 포인터도 똑같다.

구조체 포인터가 가리키는 구조체 변수의 값을 나타내려면 gamePtr 앞에 별표를 붙여 *gamePtr로 쓰면 된다.

 

그런데 이때 컴퓨터는 *gamePtr.name을 gameInfo.name 으로 인식하지못하고 *(gamePtr.name)으로 해석하기 때문에

*gamePtr이 우선순위에서 먼저 인식되도록 (*gamePtr) 처럼 소괄호 처리를 해야한다.

 

 

화살표 -> 를 사용하는 방법도 있다.

gamePtr -> name 은

(*gamePtr).name 과 같은 의미가 된다.

 

 

 

 


 

 

 

 

3. 구조체 안의 구조체

 

앞에서 정의한 GameInfo 구조체의 마지막 멤버로 friendGame을 추가로 선언한다.

 friendGame은 구조체 GameInfo의 구조체 변수를 가리키는 구조체 포인터로, 구조체 안에 있는 또 다른 구조체를 가리키는 역할을 한다.

 

 

 

 

 


 

 

4. typedef

 

  1. typedef 키워드는 이미 존재하는 자료형에 새로운 이름(별명)을 붙이는 데 사용하며, 다음과 같은 형식으로 구조체를 정의한다.
typedef struct {
           자료형1 변수명1;
           자료형2 변수명2;
           자료형3 변수명3;
        . . .
} 구조체명;

 

GameInfo 구조체에 게임정보 라는 별명을 붙인 모습. 자료형에 struct GameInfo 대신 게임정보를 사용할 수 있다.

 

   

 

2. typedef로 정의한 구조체를 사용하려면 다음과 같이 구조체 변수를 선언해야 한다.

구조체명 구조체변수명;

 

 

 

 

 

 


 

 

 

셀프체크

 

 

 

 

 

 

의문점

// 대출 여부 출력 에서

if (books[i].available == 1) 이라고 안 쓰는 이유?

 

 

 

 

 

 

 

 

 

 

 

 

어려운 구조체......

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함