Microsoft PowerPoint - chap06-2pointer.ppt

Similar documents
Microsoft PowerPoint - chap06-1Array.ppt

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

untitled

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

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

11장 포인터

슬라이드 1

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

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

PowerPoint 프레젠테이션

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

PowerPoint Presentation

Microsoft PowerPoint - Chapter_04.pptx

OCW_C언어 기초

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

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

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

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

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

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

KNK_C_05_Pointers_Arrays_structures_summary_v02

Data Structure

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

PowerPoint 프레젠테이션

PowerPoint Template

Microsoft PowerPoint - 제11장 포인터

PowerPoint Presentation

Microsoft PowerPoint - C_9장 포인터 pptx

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - chap06-8.ppt

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

Microsoft PowerPoint - chap-03.pptx

Microsoft PowerPoint - chap09-1.ppt

PowerPoint Presentation

OCW_C언어 기초

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

Microsoft PowerPoint - [2009] 02.pptx

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

11장 포인터

설계란 무엇인가?

Microsoft PowerPoint - 2장 변수와 자료형 pptx

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - Lesson2.pptx

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

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

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

C++ Programming

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

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

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

8장. 포인터

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

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

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

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

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

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

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

PowerPoint Template

PowerPoint Presentation

OCW_C언어 기초

PowerPoint Presentation

02장.배열과 클래스

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

4.0 개요 p.116 수식 (expression) 연산자 (operator) 와피연산자 (operand) 로구성 수식은평가 (evaluate) 되어최종적으로 1 개의결과값이됨 피연산자 : 상수, 변수, 또다른수식 sum - 10 (a+b) / 2 연산자 2

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

Microsoft PowerPoint - chap08-1 [호환 모드]

쉽게 풀어쓴 C 프로그래밍

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

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

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

Microsoft PowerPoint - chap04-연산자.pptx

C 프로그램의 기본

C 프로그래밊 개요

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

1.1.1 컴퓨터의 구성 p.19

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - Chapter_08.pptx

PowerPoint 프레젠테이션

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

Infinity(∞) Strategy

설계란 무엇인가?

Microsoft PowerPoint - 2주차-1차시 (강의자료) ch01 - C Programming 기초 (part 2)

Microsoft PowerPoint - 04_C_Language_Function

06 세상을 변화시키는 연산자

PowerPoint Presentation

Microsoft PowerPoint - Chapter 6.ppt

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

Microsoft PowerPoint - e pptx

Transcription:

2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1-

포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다. 이주소값을포인터라고한다. 한빛미디어 -2-

포인터란무엇인가? 메모리에는바이트 (byte) 단위로그위치를식별할수있는물리적인주소값이있다. - 메모리의용량이 64kb 라면주소값은 0 번지부터 65535 번지까지존재한다. 한빛미디어 -3-

포인터란무엇인가? 변수를선언하면그자료형의크기만큼메모리에연속된바이트의기억공간이할당되는데그첫번째바이트의주소값이포인터이다. 이포인터를사용하여 4바이트의기억공간에값을저장하거나저장된값을꺼내어쓸수있다. 한빛미디어 -4-

포인터를구하자 ( 주소연산자 ) 특정변수의포인터를구하기위해서는주소연산자 (&) 를사용한다. 포인터를구하여출력해보자. char ch; int in; double db; printf( ch 의포인터 : %u n, &ch); printf( in 의포인터 : %u n, &in); printf( db 의포인터 : %u n, &db); ch의포인터 : 1245052 in의포인터 : 1245048 db의포인터 : 1245040 // char형변수의주소값 // int형변수의시작주소값 // double형변수의시작주소값 한빛미디어 -5-

포인터는특정자료형을가리킨다. 포인터에는자신이어떤자료형으로부터만들어졌는지에대한정보를가지고있다. 포인터 &ch &in &db 값 1245052 1245048 1245040 혈통에대한정보 나는 char형기억공간의주소값이다! 나는 int형기억공간의시작주소값이다! 나는 double형기억공간의시작주소값이다! 포인터가특정자료형에대한정보를가지고있다는것을간단히표현할때 가리킨다 고하고화살표를사용하여그림을그린다. 한빛미디어 -6-

포인터를사용하자 ( 참조연산자 ) 포인터를통해서기억공간을사용하기위해서는참조연산자 (*) 를사용한다. char ch; int in; double db; *&ch = P ; *&in = 100; *&db = 3.14; printf( 변수 ch에저장된문자 : %c n, ch); printf( 변수 in에저장된값 : %d n, in); printf( 변수 db에저장된값 : %lf n, db); // 포인터 &ch가가리키는기억공간에 P 를저장한다. // 포인터 &in이가리키는기억공간에 100을저장한다. // 포인터 &db가가리키는기억공간에 3.14를저장한다. 변수 ch에저장된문자 : P 변수 in에저장된값 : 100 변수 db에저장된값 : 3.140000 한빛미디어 -7-

포인터를사용하자 ( 참조연산자 ) 참조 는기억공간뿐만아니라기억공간에저장된값도사용한다. int a=100, b=0; b = *&a; // 포인터 &a가가리키는기억공간의값을 b에대입한다. printf( b의값 : %d n, b); 기억공간을사용하는것과값을사용하는것은대입연산자의어디에위치하느냐에따라결정된다. int a=10, b=20; *&a = *&b; // 변수 b에저장된값을변수 a의기억공간에저장한다. printf( a의값 : %d n, a); // a의값은 20이출력된다. 한빛미디어 -8-

포인터를저장하자 ( 포인터변수 ) 포인터의값자체는정수값이지만가리키는자료형에대한정보를가지고있으므로정수형변수에저장할수없다. int a; int ap; ap = &a; // 포인터를구할변수 // 포인터를저장할변수 // a 의포인터를구해서 ap 에저장한다. 직관적으로는충분히가능할듯하지만컴파일에러가발생한다. error C2440: = : cannot convert from int * to int 한빛미디어 -9-

포인터를저장하자 ( 포인터변수 ) 포인터는포인터가가진정보를그대로보존할수있도록포인터변수에저장해야한다. 포인터변수는변수명앞에 * 을붙이고가리키는자료형을앞에적어준다. - int 형변수의포인터를저장하는포인터변수의선언 포인터변수가포인터를저장하면포인터와마찬가지로기억공간을가리킨다. int a; int *ap; ap = &a; 한빛미디어 -10-

포인터변수를사용한참조 포인터를저장한포인터변수도참조연산자로그것이가리키는기억공간또는그기억공간의값을사용할수있다. int a; int ap = &a; *ap = 10; // int형변수의선언 // 포인터변수의선언과동시에초기화, ap는변수 a를가리킨다. // 포인터변수가가리키는기억공간에 10 을저장한다. 포인터변수도하나의변수이므로주소연산자로메모리에서의위치를구할수있다. int a; // int형변수의선언 int ap = &a; printf( ap에저장된값 :%u n, ap); printf( ap자체의주소값 : %u n, &ap); // 포인터변수의선언과동시에초기화, ap 는변수 a 를가리킨다. // 변수 a 의시작주소값출력 // 포인터변수 ap 의시작주소값출력 한빛미디어 -11-

포인터정리 int a = 10; int *ap = &a; // int 형변수선언, 정수값 10 으로초기화 // int 포인터변수선언, a 의시작주소값으로초기화 printf( %d, a); printf( %d, *ap); printf( %u, &a); printf( %u, ap); printf( %u, &ap); // 1번출력, a에저장된정수값 10 // 1번출력, ap가가리키는곳에저장된값 10 // 2번출력, a의시작주소값 52번지 // 3번출력, ap에저장된주소값 52번지 // 4번출력, 포인터변수 ap의시작주소값 48번지 한빛미디어 -12-

포인터의필요성 함수들은독립된기억공간을가지므로다른함수에선언된변수를사용할수없다. - assign 함수를호출하여메인함수에있는 cheoli 변수에값을할당하는예 #include <stdio.h> void assign(); int main() { int cheoli=0; } assign(); printf(" 함수가호출된후에 cheoli 에저장된값 : %d n", cheoli); return 0; void assign() { cheoli=100; } 함수가호출된후에 cheoli 에저장된값 : 0 한빛미디어 -13-

포인터로다른함수의기억공간을사용한다. assign함수가 main함수의 cheoli변수를사용하기위해서는메모리에서의위치 ( 포인터 ) 를알아야한다. #include <stdio.h> void assign(int *ip); int main() { int cheoli=0; assign(&cheoli); printf(" 함수가호출된후에 cheoli 에저장된값 : %d n", cheoli); // 100 출력 } return 0; void assign(int *ip) { *ip=100; } 한빛미디어 -14-

함수의한계를극복한다. 함수는전달인자가많아도리턴되는값은오직하나이다. 따라서메인함수에있는두변수의값을바꾸는함수는포인터를사용해야한다. #include <stdio.h> void exchange(int *, int *); int main() { int cheoli=10, metel=20; } exchange(&cheoli, &metel); // [1] return 0; void exchange(int *cp, int *mp) { int temp; } temp=*cp; // [2] *cp=*mp; // [3] *mp=temp; // [4] 한빛미디어 -15-

함수의한계를극복한다. [1] [2] [3] [4] 한빛미디어 -16-

포인터에관한중요한질문 포인터와포인터변수의크기는몇바이트인가? - 컴파일러마다다를수있으므로 sizeof 연산자로계산한다. int in; int *ip = &in; printf( int형변수의포인터의크기 : %d n, sizeof(&in)); printf( int형변수를가리키는포인터변수의크기 : %d n, sizeof(ip)); - 포인터와포인터변수의크기는가리키는자료형과는관계없이항상같다. char ch; int in; double db; char *cp = &ch; int *ip = &in; double *dp = &db; printf( %d, %d, %d n, sizeof(cp), sizeof(ip), sizeof(dp)); printf( %d, %d, %d n, sizeof((*cp), sizeof(*ip), sizeof(*dp)); // 결과는 4, 4, 4 // 결과는 1, 4, 8 한빛미디어 -17-

포인터에관한중요한질문 포인터와포인터변수는자동형변환이가능한가? - 기본자료형은자동형변환이가능하나포인터 ( 변수 ) 는불가능하다. ( 형변환연산자를사용한명시적형변환은가능하다.) int *ip; double db=6.5; ip=&db; // int 형변수를가리키는포인터변수 // double 형변수 // double 형변수의포인터를 int 형포인터변수에대입 컴파일에러 error C2440: = : cannot convert from double * to int * - 자동형변환이가능하다면정수값이저장된기억공간에서실수값을참조하는오류를범하게될것이다. - 포인터의형변환규칙은함수의전달인자와매개변수사이에도적용된다. 한빛미디어 -18-