윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.

Slides:



Advertisements
Similar presentations
비즈쿨 - 정 성 욱 - - 금오공고 비즈쿨 - 정 성 욱 1. 나는 각 단원들의 활동들에 성실하게 참여 하겠습니다. 우리의 다짐 2. 나는 나와 전체의 발전을 위해 각 멘토들의 지도에 순종하겠습니다. 3. 나는 각 단원들을 숙지함으로써 비즈니스 마인드를 함양하고 자신의.
Advertisements

폭력. 폭력이란 무엇인가 우상의 눈물 물리적인 폭력 ( 최기표 ) VS 지능적인 폭력 ( 임형우, 담임선생님 )
1 박 2 일 !!! 인천마장초등학교 유수아. 1 박 2 일 멤버 인기순 위 1 위 이승기 2 위 엄태웅 3 위 은지원 4 위 김종민, 이수근 ※인터넷에서 본것이기 때문에 사람에따라 서 다를 수 있다. ※
석관중앙교회 5남전도회 석 관 중 앙 교 회 회원 소식 통권 05-04호 발행일 : 2005년 04월 회 장 : 장진호 집사
Chapter 02. C언어 기반의 C++ 박 종 혁 교수 UCS Lab SeoulTech Tel:
지역사회복지론 1조. 요양보호시설에 대해서 황성국 임재형 이동영
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
I 문학의 개념과 역할 1. 문학의 개념 (1) 언어 예술로서의 문학 (2) 소통 활동으로서의 문학
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
4. 목적론적 윤리와 의무론적 윤리 01. 경험주의와 이성주의 01. 경험주의와 이성주의 02. 결과론적 윤리와 공리주의
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 6장. 함수 #include <stdio.h> int main(void) { int num;
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
C 10장. 함수의 활용 #include <stdio.h> int main(void) { int num;
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
C언어: 배열 (Arrays).
6장. printf와 scanf 함수에 대한 고찰
Chapter 13 문자 데이터와 문자열 문자 데이터 문자열.
8장 포인터.
25장. 메모리 관리와 동적 할당.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
3장. 포인터, 배열, 구조체 포인터, 배열, 구조체 학습목표 기본적 데이터 타입
Chapter 4 매개변수와 오버로딩 Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
컴퓨터 프로그래밍 기초 - 2nd : scanf(), printf() 와 연산자 -
C ++ 프로그래밍 시작.
표준 출력 함수 printf 출력 데이터 서식화(formatting) 표준 입력 함수 scanf 입력 데이터 서식화
프로그래밍2 및 실습 C언어 기반의 C++ 2.
14장. 포인터와 함수에 대한 이해.
13. 포인터와 배열! 함께 이해하기.
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
개항기 조선과 동아시아 박 범 한국역사입문Ⅱ.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 11. 1차원 배열.
자전거를 배우려면 안장에 올라가 페달을 밟아라.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
칼빈의 생애와 개혁자로의 변모 사학과 김종식.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 05. 상수와 기본 자료형.
Python.
국제의료관광 관련 법, 제도.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 09. C언어의 핵심! 함수!
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
처음으로 배우는 C 프로그래밍 제3부 함수 제 6 장 함수 작성.
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
Chapter 11. 배열과 포인터.
자바 5.0 프로그래밍.
대구의 부도심 대구의 주요축 동대구 부도심 4조 강민석 / 박성균 / 최은지/ 황재현/김예지.
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
-Part1- 제7장 반복문이란 무엇인가.
18장. 다차원 배열 그리고 포인터.
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
사도행전 13장 22절 말씀 –아멘 다 윗 을 왕 으 로 세 우 시 고 증 언 하 여 이 르 시 되 내 가 이 새 의 아 들
CHAPTER 9-1 한국의 사회복지정책 - 사회보험제도 -
컴퓨터 프로그램은 여러 기능의 복합체이다. 라이브러리 함수와 사용자 정의 함수
1학기 정리 지난 학기에 배운 내용을 복습해 본다..
다문화 사회의 이해 배 상 훈 . 1. 한국사회의 다문화현상 2. 원인과 정책으로 살펴본 다문화 한국사회.
경찰행정과 세미나 결과를 공개해야한다. VS 비공개로 해야한다. 경찰의 근무성적평정 제도.
캡슐화 (Encapsulation) 두원공과대학 소프트웨어개발과 이 원 주.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
어서와 C언어는 처음이지 제16장.
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
17장. 포인터의 포인터.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력
Chapter 09. 배열.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 17. 포인터의 포인터.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
배열, 포인터, 함수 Review & 과제 1, 2.
경찰학 세미나 제 5 강 경찰관직무집행법 2조 5호의 의미 신라대학교 법경찰학부 김순석.
Presentation transcript:

윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해

Chapter 14-1. 함수의 인자로 배열 전달하기 윤성우의 열혈 C 프로그래밍 Chapter 14-1. 함수의 인자로 배열 전달하기 윤성우 저 열혈강의 C 프로그래밍 개정판

인자전달의 기본방식은 값의 복사이다! 윤성우의 열혈 C 프로그래밍 age에 저장된 값이 매개변수 num에 복사가 된다. 배열을 함수의 매개변수에 전달하는 이유는 함수 내에서 배열에 저장된 값을 참조하도록 하기 위함이다. 그런데 배열을 통째로 전달하지 않아도 이러한 일이 가능하다. 실제 전달되는 것은 age가 아니라 age에 저장된 값이다. 위의 코드에서 보이는 바와 같이, 배열을 함수의 인자로 전달하려면 배열을 통째로 복사할 수 있도록 배열이 매개변수로 선언되어야 한다. 그러나 C언어는 매개변수로 배열의 선언을 허용하지 않는다. 결론! 배열을 통째로 복사하는 방법은 C언어에 존재하지 않는다. 따라서 배열을 통째로 복사해서 전달하는 방식 대신에, 배열의 주소 값을 전달하는 방식을 대신 취한다.

배열을 함수의 인자로 전달하는 방식 윤성우의 열혈 C 프로그래밍 int main(void) { 배열의 이름은 int형 포인터! 따라서 int형 포인터 변수에 배열의 이름이 지니는 주소 값을 저장할 수 있다. 배열의 이름은 int형 포인터! 위의 예제를 통해서 다음과 같은 코드의 구성이 가능함을 유추할 수 있다. int main(void) { int arr[3]={1, 2, 3}; SimpleFunc(arr); . . . . } 배열이름 arr읜 int형 포인터이므로 매개변수는 int형 포인터 변수! void SimpleFunc(int * param) { printf(“%d %d”, param[0], param[1]); } 포인터 변수를 이용해서도 배열의 형태로 접근가능! 배열이름 arr이 지니는 주소 값의 전달

윤성우의 열혈 C 프로그래밍 배열을 함수의 인자로 전달하는 예제 실행결과 실행결과

배열을 함수의 인자로 전달받는 함수의 또 다른 선언 윤성우의 열혈 C 프로그래밍 배열을 함수의 인자로 전달받는 함수의 또 다른 선언 동일한 선언 매개변수의 선언에서는 int * param과 int param[]이 동일한 선언이다. 따라서 배열을 인자로 전달받는 경우에는 int param[]이 더 의미있어 보이므로 주로 사용된다. 하지만 그 이외의 영역에서는 int * ptr의 선언을 int ptr[]으로 대체할 수 없다.

Chapter 14-2. Call-by-value vs. Call-by-reference 윤성우의 열혈 C 프로그래밍 Chapter 14-2. Call-by-value vs. Call-by-reference 윤성우 저 열혈강의 C 프로그래밍 개정판

값을 전달하는 형태의 함수호출: Call-by-value 윤성우의 열혈 C 프로그래밍 값을 전달하는 형태의 함수호출: Call-by-value 함수를 호출할 때 단순히 값을 전달하는 형태의 함수호출을 가리켜 Call-by-value라 하고, 메모리의 접근에 사용되는 주소 값을 전달하는 형태의 함수호출을 가리켜 Call-by-reference라 한다. 즉, Call-by-value와 Call-by-reference를 구분하는 기준은 함수의 인자로 전달되는 대상에 있다. call-by-value call-by-value와 call-by-reference라는 용어를 기준으로 구분하는 것이 중요한 게 아니다. 중요한 것은 각 함수의 특징을 이해하고 적절한 형태의 함수를 정의하는 것이다. call-by-value 형태의 함수에서는 함수 외부에 선언된 변수에 접근이 불가능하다. 그러나 call-by-reference 형태의 함수에서는 외부에 선언된 변수에 접근이 가능하다. call-by-reference

call-by-value가 적절치 않은 경우 윤성우의 열혈 C 프로그래밍 잘못 적용된 Call-by-value Swap 함수 내에서의 값의 교환 call-by-value가 적절치 않은 경우 실행결과 Swap 함수 내에서의 값의 교환은 외부에 영향을 주지 않는다.

주소 값을 전달하는 형태의 함수호출: Call-by-reference 윤성우의 열혈 C 프로그래밍 주소 값을 전달하는 형태의 함수호출: Call-by-reference Swap 함수 내에서 함수 외부에 있는 변수간 값의 교환 실행결과 Swap 함수 내에서의 *ptr1은 main 함수의 num1 Swap 함수 내에서의 *ptr2는 main 함수의 num2 를 의미하게 된다.

scanf 함수호출 시 & 연산자를 붙이는 이유는? 윤성우의 열혈 C 프로그래밍 scanf 함수호출 시 & 연산자를 붙이는 이유는? 변수 num 앞에 & 연산자를 붙이는 이유는? scanf 함수 내에서 외부에 선언된 변수 num에 접근 하기 위해서는 num의 주소 값을 알아야 한다. 그래서 scanf 함수는 변수의 주소 값을 요구한다. 배열 이름 str 앞에 & 연산자를 붙이지 않는 이유는? str은 배열의 이름이고 그 자체가 주소 값이기 때문에 & 연산자를 붙이지 않는다. str을 전달함은 scanf 함수 내부로 배열 str의 주소 값을 전달하는 것이다.

Chapter 14-3.포인터 대상의 const 선언 윤성우의 열혈 C 프로그래밍 Chapter 14-3.포인터 대상의 const 선언 윤성우 저 열혈강의 C 프로그래밍 개정판

포인터 변수의 참조대상에 대한 const 선언 윤성우의 열혈 C 프로그래밍 포인터 변수의 참조대상에 대한 const 선언 왼편의 const 선언이 갖는 의미 포인터 변수 ptr을 이용해서 ptr이 가리키는 변수에 저장된 값을 변경하는 것을 허용하지 않겠습니다! 그러나 변수 num에 저장된 값 자체의 변경이 불가능한 것은 아니다. 다만 ptr을 통한 변경을 허용하지 않을뿐이다.

포인터 변수의 상수화 윤성우의 열혈 C 프로그래밍 const int * ptr=&num; 포인터 변수 ptr에 저장된 값을 상수화 하겠다. 즉, ptr에 저장된 값은 변경이 불가능하다. ptr이 가리키는 대상의 변경을 허용하지 않는다. const int * ptr=&num; const int * const ptr=&num; int * const ptr=&num; 두 가지 const 선언을 동시에 할 수 있다.

const 선언이 갖는 의미 윤성우의 열혈 C 프로그래밍 안전성이 높아진 코드 const 선언은 추가적인 기능을 제공하기 위한 것이 아니라, 코드의 안전성을 높이기 위한 것이다. 따라서 이러한 const의 선언을 소홀히하기 쉬운데, const의 선언과 같이 코드의 안전성을 높이는 선언은 가치가 매우 높은 선언이다.

Chapter 14가 끝났습니다. 질문 있으신지요?