• 검색 결과가 없습니다.

15강. 포인터로 구조체 다루기

N/A
N/A
Protected

Academic year: 2022

Share "15강. 포인터로 구조체 다루기"

Copied!
10
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

C 언어 포인터 정복하기

TAE-HYONG KIM

COMPUTER ENG, KIT

15강. 포인터로 구조체 다루기

(2)

학습 내용

 구조체 배열로 자료 저장하기

 구조체 포인터로 자료 접근하기

 함수의 인자로 구조체 넘겨주기

 함수로부터 구조체 넘겨받기

2

(3)

구조체와 자료 생성

 구조체는 어떤 자료를 생성하기 위한 정보를 구성해 준다

 책: 제목, 저자, 출판사, 출판일, ISBN, 가격

 구조체 변수는 책 1권의 정보를 저장할 수 있다

 소유한 책들의 정보를 저장하여 관리하려면 배열로 선언해야 한다

 구조체 배열

3

struct book {

char title[30];

char author[20];

char publisher[20];

char date[11];

char ISBN[14];

int price;

};

typedef struct book BOOK;

BOOK book1 = { “에티카”, “스피노자”, “책세상”, “2006.10.25”,

“9788970135953”, 5900 };

BOOK mybooks[100];

mybooks[0] = book1;

strcpy(mybooks[1].title, “이방인”);

(4)

구조체 배열의 구성

 구조체 배열의 메모리 구성

 구조체 배열의 정보 입력

 각 배열요소를 구조체변수처럼 사용

 배열처럼 초기화 가능

 멤버가 많으므로 보통 함수로 설계

 구조체 배열(이름)을 저장하려면?

 구조체 포인터 필요

4

struct person { char name[8];

unsigned age;

} members[3];

printf(“%u”, sizeof(members));

100 104 108 112

128 132 116 120 124 members[0]

.name .age members[1]

.name .age members[2]

.name .age

struct person members

strcpy(members[0].name, “홍길동”);

members[0].age = 20;

memCnt = addMember(members, memCnt);

(5)

구조체 포인터의 선언과 용법

 구조체 포인터의 생성 및 선언

 구조체 변수 앞에 ‘&’를 붙여 구조체 포인터 상수 생성

 구조체 포인터를 저장할 구조체 포인터 변수 선언

• 구조체자료형 *포인터변수;

 구조체 포인터로 멤버 접근하기

 구조체포인터 참조연산을 통해 접근 ( 우선순위 주의)

 간접멤버참조연산자 (->)를 통해 접근

• 구조체포인터

->구조체멤버

5

struct person member;

? = &member; 100

104 108 112 116 .name

.age member

struct person

&member

struct person *memptr = &member;

struct person

memptr 100

(*memptr).age = 20;

memptr->age = 30;

(6)

구조체를 함수에 전달하기

 변수와 동일한 함수 인자 전달방식을 갖는다

 구조체 변수 값 전달(Call by Value)

• 구조체 변수 값을 복사해 사용  원래 구조체 값은 바뀌지 않음

 구조체 포인터 전달(Call by Reference)

• 구조체포인터 값이 복사됨  원 구조체에 직접 접근

• 구조체배열의 이름을 전달할 때  배열 공간에 직접 접근

6

printPerson(member); // void printPerson(struct person);

printPerson(members[0]);

modifyPerson(&member); // void modifyPerson(struct person *);

memCnt = addPerson(members, memCnt);

// int modifyPerson(struct person *, int);

// int modifyPerson(struct person [], int);

(7)

구조체 포인터 함수 전달 예

7

패턴 22 함수를 통한 회원(구조체) 입력 및 출력 (1)

#include <stdio.h>

#define N 10 typedef struct { char name[8];

int age;

} PERSON;

int addPerson(PERSON *, int); // 회원입력함수 Void printPerson(PERSON); // 회원출력함수 Int main(void)

{

PERSON members[N]; // 회원 구조체 배열 int memCnt = 0; // 현재 회원 수 저장 int sel, I;

while (1) {

printf("선택하세요 (1: 회원입력 2: 회원출력 3: 종료) : ");

scanf("%d", &sel);

fflush(stdin);

if (sel == 1)

memCnt = addPerson(members, memCnt); // memCnt번째 요소에 입력

(8)

구조체 포인터 함수 전달 예

8

패턴 22 함수를 통한 회원(구조체) 입력 및 출력 (2)

else if (sel == 2)

for (i=0; i<memCnt; i++)

printPerson(members[i]); // i번째 회원출력 else

break; // 종료 }

return 0;

}

int addPerson(PERSON *memPtr, int num) // 배열 전체 전달받음 {

printf("회원의 이름을 입력하세요: ");

fgets(memPtr[num].name, 8, stdin);

printf("회원의 나이를 입력하세요: ");

scanf("%d", &(memPtr+num)->age); // scanf(“%d”, &memPtr[num].age);

fflush(stdin);

return num+1;

}

Void printPerson(PERSON member) // 한 회원의 값만 전달받음 {

printf("회원 이름: %s", member.name);

printf("회원 나이 : %d\n\n", member.age);

}

(9)

함수로부터 구조체 전달받기

 함수로부터 구조체를 전달받는 방법

 구조체포인터로 전달한 인자로부터 자동 갱신

 함수의 반환값으로부터 전달받아 저장하기

• 구조체 반환 함수

9

struct person member, members[3];

int memCnt = 1;

...

member = getPerson(members, memCnt);

printPerson(member);

...

struct person getPerson(struct person *memPtr, int num) {

struct person outMem;

strcpy(outMem.name, memPtr[num].name);

outMem.age = memPtr[num].age;

return outMem;

}

(10)

다음 강의 소개

 16강. 포인터로 자료 구조화 하기

 구조체멤버와 구조체포인터 멤버

 다른 구조체(변수)를 가리키는 구조체(변수)

 ‘연결된 리스트’의 구성 및 관리

 포인터로 ‘연결된 리스트’ 탐색하기

10

참조

관련 문서

금속-유기 구조체(Metal-Organic Framework, MOF)는 금속과 유기물질로 이루어진 골격을 가지고 있는 화합물로, 금속 이온과 산소 이온 사이에 유기물을 넣는 단순한 방법을 통해 다양

• LVITEM 구조체 변수를 완성한 후, CListCtrl 클래스의 멤버 함 수인 InsertItem() 함수로 아이템을 추가함... 리스트 컨트롤의

들어온다면 처리하지 못할 것이고 더 작은 입력이 들어온 다면 남은 메모리 공간은 낭비될 것이다... C로

[r]

우리나라는 온도의 단위로 ℃를 사용하지만 미국 등에서는 ℉를 사용한다...

세 개의 CandyBar 구조체를 원소로 가지는 배열을 만들고, 그 배열의 구조체 원소들을 원하는 값으로 초기화한 다음, 각 구조체의

The 11th Congress of the Lao People’s Revolutionary Party elected 71 Party Central Committee members.. The ten alternative Party

© 2020 KPMG Samjong KPMG Economic Research Institute Inc., the Korean member firm of the KPMG network of independent member firms affiliated with KPMG International