KNK_C_05_Pointers_Arrays_structures_summary_v02

Similar documents
[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint 프레젠테이션

11장 포인터

02장.배열과 클래스

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

금오공대 컴퓨터공학전공 강의자료

윤성우의 열혈 TCP/IP 소켓 프로그래밍

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

untitled

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 제11장 포인터

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

기초컴퓨터프로그래밍

슬라이드 1

Microsoft PowerPoint - chap03-변수와데이터형.pptx

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint - chap-11.pptx

11장 포인터

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열

Microsoft PowerPoint - ch08 - 구조체 (structure) am0845

Microsoft PowerPoint - chap09-1.ppt

OCW_C언어 기초

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

14 주차구조체와공용체

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

설계란 무엇인가?

C++ Programming

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

PowerPoint 프레젠테이션

OCW_C언어 기초

Lab 3. 실습문제 (Single linked list)_해답.hwp

슬라이드 1

PowerPoint 프레젠테이션

컴파일러

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

PowerPoint Presentation

Microsoft PowerPoint - 07_(C_Programming)_(Korean)_Composite_Data_Types

PowerPoint Presentation

Slide 1

untitled


Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - chap06-1Array.ppt

11장 포인터

슬라이드 1

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

설계란 무엇인가?

Microsoft PowerPoint - Chapter_09.pptx

Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

C 프로그램의 기본

Microsoft PowerPoint - chap06-5 [호환 모드]

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

PowerPoint Presentation

Microsoft PowerPoint - Chapter_08.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

슬라이드 1

untitled

PowerPoint Template

Microsoft PowerPoint - chap12-고급기능.pptx

BMP 파일 처리

Microsoft PowerPoint - Chapter_04.pptx

설계란 무엇인가?

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>


Microsoft PowerPoint - C_9장 포인터 pptx

본 강의에 들어가기 전

Microsoft PowerPoint - chap09.ppt

JAVA PROGRAMMING 실습 02. 표준 입출력

C 언어 프로그래밊 과제 풀이

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Microsoft PowerPoint - 제3장-배열.pptx

PowerPoint 프레젠테이션

ABC 9장

K&R2 Reference Manual 번역본

Chapter 4. LISTS

C 프로그래밊 개요

이번장에서학습할내용 구조체란무엇인가? 구조체의선언, 초기화, 사용 구조체의배열 구조체와포인터 구조체와함수 공용체 열거형 typedef 구조체는복잡한내용을일목요연하여정리하는데유용하게사용됩니다. 2

Transcription:

Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach

요약 2

Pointers and Arrays 3

배열의주소 #include <stdio.h> int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n", &c); printf("&c[0]\t%p\n", &c[0]); return 0; } 0x7fff574dbfd0 $ gcc -o a.out addr.c $./a.out c 0x7fff574dbfd0 &c 0x7fff574dbfd0 &c[0] 0x7fff574dbfd0 0x7fff574dbfd4 0x7fff574dbfd8 0x7fff574dbfdc 31 배열시작주소 = 배열인덱스 0 의주소 1 0 c[0] 2 c[1] 3 c[2] 4 c[3] 4

배열의주소를포인터로확인하는방법 #include <stdio.h> int main(){ int c[] = {1, 2, 3, 4}; int *p = c; printf("c\t%p\n", c); printf("&c\t%p\n", &c); printf("&c[0]\t%p\n", &c[0]); printf("&*p\t%p\n",&*p); return 0; 0x7fff574dbfd0 } 0x7fff574dbfd4 $ gcc -o a.out addr.c $./a.out c 0x7fff574dbfd0 &c 0x7fff574dbfd0 &c[0] 0x7fff574dbfd0 &*p 0x7fff58497fd0 0x7fff574dbfd8 0x7fff574dbfdc 31 0 0x7fff511e5fd0 p 1 c[0] 2 c[1] 3 c[2] 4 c[3] 포인터로배열참조가능 5

포인터변수의덧셈 #include <stdio.h> int main(){ int c[] = {1, 2, 3, 4}; int *p = c; for (int i = 0; i<4; i++) printf( p+%d, addr: %p, i, p+i); return 0; } 0x7fff574dbfd0 $ gcc -o a.out addr.c $./a.out p+0 0x7fff574dbfd0 p+1 0x7fff574dbfd4 p+2 0x7fff574dbfd8 p+3 0x7fff58497fdc 0x7fff574dbfd4 0x7fff574dbfd8 0x7fff574dbfdc 31 0x7fff511e5fd0 1 0 p c[0] 2 c[1] 3 c[2] 4 c[3] 포인터변수를증감하면형의크기만큼증감 6

포인터변수의덧셈 II #include <stdio.h> int main(){ int c[] = {1, 2, 3, 4}; int *p = c; for (int i = 0; i<4; i++) printf( p++, addr: %p, p++); return 0; } 0x7fff574dbfd0 $ gcc -o a.out addr.c $./a.out p++ 0x7fff574dbfd0 p++ 0x7fff574dbfd4 p++ 0x7fff574dbfd8 p++ 0x7fff58497fdc 0x7fff574dbfd4 0x7fff574dbfd8 0x7fff574dbfdc 31 0x7fff511e5fd0 1 0 p c[0] 2 c[1] 3 c[2] 4 c[3] ++, -- 증감연산자도형의크기만큼증감 7

Putting it together 1. 배열시작주소 = 배열인덱스 0 의주소 2. 포인터로배열참조가능 3. 포인터변수의증감 à 형의크기만큼증감 포인터로배열인덱스참조가능 8

포인터로배열인덱스지정하기공식 시작주소 +( 변수의타입 )* 인덱스 int c[] = {1, 2, 3, 4}; int *p = c; p+2; 500 504 508 512 516 520 524 31 0 512 pc 1 c[0] 2 c[1] 3 c[2] 4 c[3] c[2] 의주소 = 512 + 4*2 = 520 9

포인터로배열인덱스지정하기 포인터변수는형의크기만큼증감함 int c[] = {1, 2, 3, 4}; int *p = c; 31 0x7fff511e5fd0 0 p 연습문제 *p c 주소의값 1 을읽음 0x7fff511e5fd0 0x7fff511e5fd4 0x7fff511e5fd8 0x7fff511e5fdc 1 c[0] 2 c[1] 3 c[2] 4 c[3] 10

포인터로배열인덱스지정하기 포인터변수는형의크기만큼증감함 int c[] = {1, 2, 3, 4}; int *p = c; 31 0x7fff511e5fd0 0 p 연습문제 *p c[0] 을읽음 *p+2 c[2] 를읽음 0x7fff511e5fd0 0x7fff511e5fd4 0x7fff511e5fd8 0x7fff511e5fdc 1 c[0] 2 c[1] 3 c[2] 4 c[3] 11

구조체 (structures) 12

꼭알아야할것 구조체란 메모리에서의표현 구조체선언 구조체초기화 구초제값의접근 구조체활용 구조체로형선언 13

구조체란 복합저장공간 하나이상의서로다른형의변수를저장가능 구조체안에구조체포함가능 관련있는데이터의모음 모이면풍성해지는구조체 예 : 좌표계의한지점의위치값 (x, y, z) 성적표의과목마다받은성적 ( 국, 영, 수,...) 연락처에들어가는정보 ( 이름, 전화 1, 전화 2, 생일, 주소,...) 도서관서지정보 ( 책제목, 페이지수, 출판사, 출판일, ) 14

구조체선언 : 기본구조 struct { 변수형변수이름 ; 변수형변수이름 ; } 구조체명 ; 멤버변수 좌표계의한지점의위치값 (x, y, z) 지점의좌표 struct { int x; int y; int z; } PointA; 성적표의과목마다받은성적 ( 국, 영, 수,...) 성적표 struct { float Kor; float Eng; float Math; } Score; 15

구조체선언 : 기본구조 struct { 연락처에들어가는정보 ( 이름, 전화1, 전화2, 생일, 주소,...) 전화번호 struct { 변수형변수이름 ; 변수형변수이름 ; } 구조체명 ; char Name[20]; char Phone[13]; char Birth[10]; char Addr[100]; } PersonInfo; 도서관서지정보 ( 책제목, 페이지수, 출판사, 출판일, ) 서지정보 struct { int Title; int Page; int Pub; int Year; } Book; 멤버변수 16

구조체초기화 : 선언시초기화 struct { 변수형변수이름 ; 변수형변수이름 ; } 구조체명 = { 값 1, 값 2, }; 배열처럼 초기화 지점의좌표 struct { int x; int y; int z; } PointA = { 30, 40, 50 }, PointB = {50, 30, 20 }; 17

구조체값의접근 지점의좌표 struct { int x; int y; int z; } PointA = { 30, 40, 50 }, PointB = {50, 30, 20 }; 새로운연산자. 점 구조체의멤버변수접근 PointA.x; PointA.y; PointA.z; 18

구조체초기화 : 선언후초기화 지점의좌표 struct { int x; int y; int z; } PointA; PointA.x = 30; PointA.y = 40; PointA.z = 50; 19

메모리에서의표현 지점의좌표 struct { int x; int y; int z; } PointA; 500 504 508 512 516 31 30 40 50 0 x y z PointA.x = 30; PointA.y = 40; 520 524 PointA.z = 50; 20

구조체활용 : 함수의인자, 매개변수 struct point { }; int x; int y; int z; struct point savepoint(int x, int y, int z) { struct point p; int main() p.x = x; { p.y = y; p.z = z; struct point pointa; return p; pointa = savepoint(30, 40, 50); } 구조체변수리턴 구조체의선언 리턴타입 : struct point } 리턴받은정보를 PointA에저장 21

구조체형선언 태그로형선언 지점의좌표 struct Point{ int x; int y; int z; } ; typedef 로형선언 구조체에반복사용할수있는이름을부여함 struct Point A = {30, 40, 50}; struct Point B = {40, 30, 20}; 구조체태그가있기때문에구조체재선언없이같은타입의구조체를재활용하여선언할수있음태그가없으면구조체선언부를매번다시써야함 22

구조체형선언 태그로선언하여쓰는방법의단점 struct 구조체태그명 을반복하여써야함 typedef 으로선언하는방법 선언한구조체가새로운형이됨 지점의좌표 typedef struct { int x; int y; int z; } Point; typedef 새로운형을만들때쓰는키워드 새로운형의이름 Point A = {30, 40, 50}; Point B = {40, 30, 20}; 다른형들처럼변수명앞에씀 23

구조체의할당 지점의좌표 typedef struct { int x; int y; int z; } Point; 구조체는 = 연산자로복사됨 A.x 에 30, A.y 에 40, A.z 에 50 을저장 B = A; 문장으로통해 B.x 에 30, B.y 에 40, B.z 에 50 을저장 Point A = {30, 40, 50}; Point B; B = A; 단, 모든구조체가동일하게동작하는것은아님상세자료참고 24