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

Similar documents
Microsoft PowerPoint - chap06-2pointer.ppt

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

Microsoft PowerPoint - chap06-1Array.ppt

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

슬라이드 1

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

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

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - 04_C_Language_Function

설계란 무엇인가?

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

Data Structure

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint 프레젠테이션

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

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

11장 포인터

untitled

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

PowerPoint Presentation

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - chap06-8.ppt

OCW_C언어 기초

C 프로그램의 기본

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

제4장 기본 의미구조 (Basic Semantics)

Microsoft Word - FunctionCall

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

C언어 및 실습 C Language and Practice

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

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - C++ 5 .pptx

C++ Programming

Microsoft PowerPoint - chap09-1.ppt

설계란 무엇인가?

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

Microsoft PowerPoint - 제11장 포인터

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

KNK_C_05_Pointers_Arrays_structures_summary_v02

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

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

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

C++ Programming

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

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

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - chap05-제어문.pptx

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

C 언어와 프로그래밍 개요

OCW_C언어 기초

PowerPoint Presentation

8장. 포인터

슬라이드 1

Microsoft PowerPoint - chap-09.pptx

C# Programming Guide - Types

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap11-1.ppt [호환 모드]

<4D F736F F F696E74202D20C1A639C0E520C7D4BCF6BFCDBAAFBCF6>

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

Chapter 4. LISTS

쉽게 풀어쓴 C 프로그래밍

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

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

02장.배열과 클래스

Microsoft PowerPoint - 05장(함수) [호환 모드]

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

PowerPoint Template

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - chap05.ppt

Microsoft PowerPoint - Chapter_08.pptx

PowerPoint Presentation

컴파일러

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

슬라이드 1

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770>

중간고사

슬라이드 1

슬라이드 1

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

11장 포인터

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - Java7.pptx

Frama-C/JESSIS 사용법 소개

문서의 제목 나눔명조R, 40pt

PowerPoint Template

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

Slide 1

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

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

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

Microsoft PowerPoint - web-part01-ch05-함수.pptx

ch15

Transcription:

2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net

자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다. 메모리에서의위치는스택영역이다. 자동초기화되지않으므로쓰레기값이존재한다. 한빛미디어 -2- ehanbit.net

자동변수의생존기간 자동변수는함수가호출되어변수선언문이실행될때메모리에기억공간이할당된다. - 세개의자동변수를사용하는함수의예 ( 매개변수도자동변수이다 ). int sum(int a, int b) int res; res=a+b; return res; 자동변수는함수가리턴되고나면더이상사용되지않는기억공간이므로리턴될때메모리에서사라진다. 한빛미디어 -3- ehanbit.net

기억공간의할당과회수 자동변수의할당과회수는하나의함수내에서도발생한다. - 함수내에서새로운블록을열고변수를선언하면그블록이끝날때 변수는사라진다. 결국변수의사용범위는블록내부이다. int a=10, b=20; // 메인함수블록에선언된변수 printf(" 바꾸기전 a : %d, b: %d n", a, b); // 새로운블록의시작 int temp; // 안쪽블록에선언된변수 temp=a; a=b; b=temp; // 블록이끝나면서 temp변수는사라진다. printf(" 바꾼후 a : %d, b : %d n", a, b); 한빛미디어 -4- ehanbit.net

중첩된블록에서같은이름의변수를사용할경우 중첩된블록에서같은이름의변수를선언하면가장가까운블록에선언된변수에우선권이있다. int val=10; int val=20; val++; 1 2 printf("val : %d n", val); printf("val : %d n", val); 각변수의사용범위는변수가선언된블록의끝까지이다. 가장가까이선언된 2 번변수를사용한다. 출력결과 val : 21 // 2 번출력 val : 10 // 1 번출력 한빛미디어 -5- ehanbit.net

자동변수가메모리에할당되는방법 자동변수는함수의호출순서에따라할당되고리턴될때회수된다. 따라서가장나중에할당된자동변수가가장먼저사라진다. - 메인함수와 A, B 로구성된함수들의호출과리턴예 자동변수는함수의호출과리턴규칙에맞게메모리의스택 (stack) 영역에할당된다. 한빛미디어 -6- ehanbit.net

함수들간의데이터전달방법 자동변수는사용범위가하나의함수로제한되기때문에 함수들간의데이터공유방법이필요하다. 값을복사해서넘겨주는방법 (call by value) 포인터를사용하는방법 (call by pointer) 한빛미디어 -7- ehanbit.net

값을복사해서넘겨준다 (call by value) 일반적인함수의호출방법으로호출함수의전달인자가피호출함수의매개변수에복사된다. 피호출함수는리턴할때리턴값을복사하여호출함수로전달한다. int add_ten(int); int a=10; a=add_ten(a); printf("a : %d n", a); int add_ten(int b) b=b+10; return b; 한빛미디어 -8- ehanbit.net

포인터를사용한다 (call by pointer) 호출함수에서변수의포인터를전달인자로주고피호출함수에서는이포인 터를받아호출함수의변수를참조하는방식이다. intadd add_ten(int ten(int*); int a=10; a=add_ten(&a); printf("a : %d n", a); void add_ten(int *b) *b=*b+10; 한빛미디어 -9- ehanbit.net

포인터를리턴하는함수 피호출함수에서포인터를리턴하여호출함수가피호출함수의기억 공간을참조할수있도록할수있다. 포인터를리턴하는함수는리턴값의형태가포인터형이된다. - int 형변수의포이터를리턴하는경우 한빛미디어 -10- ehanbit.net

포인터를리턴하는함수 자동변수의포인터를리턴하여호출함수에서다시참조하는것은위험하다. int *add_ten(int); int a=10; int *ap; ap=add_ten(a); printf("a : %d n", *ap); // 포인터변수 ap로 add_ten함수의변수를참조한다. int *add_ten(int b) b=b+10; return &b; // add_ten 함수의자동변수 b 의포인터를리턴한다. 한빛미디어 -11- ehanbit.net

포인터를리턴하는함수 포인터를리턴하는경우는함수가리턴된후에도그기억공간이계속유지되는경우만가능하다. - 호출함수로부터포인터를받아서다시리턴하는경우 ( 문자열처리함수들의예 ) char *strcpy(char *A, char *B); // B의문자열을 A에복사하고 A를리턴한다. char *strcat(char *A, char *B); char *gets(char *A); // B의문자열을 A에붙인후에 A를리턴한다. // A에문자열을입력하고 A를리턴한다. 포인터를리턴하면좀더다양한방식으로프로그램을작성할수있다. - 두문자열을붙인후에그결과를바로확인하는예 #include <string.h> char src[80]= 빈대 ; printf( 결과 : %s n, strcat(src, 떡 )); 한빛미디어 -12- ehanbit.net

정적변수 (static variable) 정적변수는함수가리턴된후에도기억공간이존재한다. 정적변수는자료형앞에 static 예약어를사용하여선언한다. 정적변수는기억공간의할당과초기화가함수의호출과무관하다. void increase(); int i; for(i=0; i<5; i++) increase(); void increase() static int sum=0; sum++; printf( sum : %d n, sum); 출력결과 sum : 1 sum : 2 sum : 3 sum : 4 sum : 5 한빛미디어 -13- ehanbit.net

정적변수는포인터를리턴할수있다. 정적변수는함수가리턴된후에도그기억공간이유지되기때문에그포인터를리턴하여호출하는함수에서참조할수있다. int *increase(); int i; int *sp; for(i=0; i<5; i++) sp=increase(); printf( sum : %d n, *sp); int *increase() static int sum=0; sum++; return 출력결과 sum : 1 sum : 2 sum : 3 sum : 4 sum : 5 한빛미디어 -14- ehanbit.net

외부변수 (extern variable) 외부변수는하나의함수에속해있지않으므로여러함수에서자유롭게사용할수있다. 외부변수는변수를함수밖에선언한다. 외부변수를사용하여두변수의값을바꾸는예 void exchange(); int a, b; // 변수를함수밖에선언한다. printf( 정수값두개를입력하세요 : ); scanf( %d%d, &a, &b); exchange(); // 전달인자없이호출한다. printf( a : %d, b : %d n, a, b); void exchange() int temp; temp=a; a=b; b=temp; // 외부변수 a, b를 // 자신의변수인것처럼 // 사용한다. 외부변수도기억공간의생존기간이함수의호출여부와무관하다. 한빛미디어 -15- ehanbit.net

외부변수를사용할때주의할점 외부변수는여러함수가공유하므로데이터의안전성을보장받을 수없다. 따라서외부변수의값에변화가생긴다면다른함수에미 치는영향도살펴야한다. 외부변수와같은이름의변수를함수내에서선언하는경우는함수 내에서선언된변수를우선적으로참조한다. exchange함수내에 a, b가선언되어있다면내부에선언된변수의값을바꾼다. 한빛미디어 -16- ehanbit.net