윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.

Slides:



Advertisements
Similar presentations
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
Advertisements

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
Part 03 상수, 변수, 자료형 ©우균, 창병모 © 우균, 창병모.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Chapter 14 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 07. 반복실행을 명령하는 반복문.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
제 9 장 구조체와 공용체.
-Part2- 제3장 포인터란 무엇인가.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
5장 배열 작성자 : 변재현.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
Chapter 25. 메모리 관리와 메모리의 동적 할당
5장. 참조 타입.
C 프로그래밍.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Chapter 06. printf 함수와 scanf 함수 정리하기
23장. 구조체와 사용자 정의 자료형 2.
6장. printf와 scanf 함수에 대한 고찰
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 03. 변수와 연산자.
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 8 장 배열, 주소, 포인터.
C#.
JA A V W. 03.
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
컴퓨터 개론 및 실습 11. 동적 메모리 할당.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
C 3장. 변수와 데이터형 #include <stdio.h> int main(void) { int num;
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Chapter 02. 자바 기본 문법.
8주차: Strings, Arrays and Pointers
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
Chapter 16. C++ 형 변환 연산자와 맺는 글
Chapter 13. 템플릿(Template) 1
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Chapter 09. 포인터 1.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 23. 구조체와 사용자 정의 자료형2.
Chapter 11 구조체.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 04. 클래스의 완성.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해

윤성우의 열혈 C 프로그래밍 Chapter 12-1. 포인터란 무엇인가? 윤성우 저 열혈강의 C 프로그래밍 개정판

주소 값의 저장을 목적으로 선언되는 포인터 변수 윤성우의 열혈 C 프로그래밍 주소 값의 저장을 목적으로 선언되는 포인터 변수 변수 num이 저장되기 시작한 주소 0x12ff76이 변수 num의 주소 값이다. 이러한 정수 형태의 주소 값을 저장하는 목적으로 선언되는 것이 포인터 변수이다.

포인터 변수와 & 연산자 맛보기 윤성우의 열혈 C 프로그래밍 포인터 변수 pnum의 선언 num의 주소 값을 pnum에 저장 “정수 7이 저장된 int형 변수 num을 선언하고 이 변수의 주소 값 저장을 위한 포인터 변수 pnum을 선언하자. 그리고 나서 pnum에 변수 num의 주소 값을 저장하자.” 코드로 옮긴 결과 포인터 변수의 크기는 시스템의 주소 값 크기에 따라서 다르다. 16비트 시스템 → 주소 값 크기 16비트 → 포인터 변수의 크기 16비트! 32비트 시스템 → 주소 값 크기 32비트 → 포인터 변수의 크기 32비트! 포인터 변수 pnum의 선언 int * pnum 의 선언에서... num의 주소 값을 pnum에 저장 메모리의 저장상태 이 상태를 다음과 같이 표현한다. 포인터 변수 pnum이 변수 num을 가리킨다.

포인터 변수 선언하기 윤성우의 열혈 C 프로그래밍 가리키고자 하는 변수의 자료형에 따라서 포인터 변수의 선언방법에는 차이가 있다. 포인터 변수에 저장되는 값은 모두 정수로 값의 형태는 모두 동일하지만, 그래도 선언하는 방법에 차이가 있다(차이가 있는 이유는 메모리 접근과 관련이 있다). int * pnum1; int * 는 int형 변수를 가리키는 pnum1의 선언을 의미함 double * pnum2; double * 는 double형 변수를 가리키는 pnum2의 선언을 의미함 unsigned int * pnum3; unsigned int * 는 unsigned int형 변수를 가리키는 pnum3의 선언을 의미함 일반화 type * ptr; type형 변수의 주소 값을 저장하는 포인터 변수 ptr의 선언

포인터의 형(Type) 윤성우의 열혈 C 프로그래밍 일반화 포인터 변수 선언에서 * 의 위치에 따른 차이는 없다. 즉, 다음 세 문장은 모두 동일한 포인터 변수의 선언문이다. int * ptr; // int형 포인터 변수 ptr의 선언 int* ptr; // int형 포인터 변수 ptr의 선언

Chapter 12-2. 포인터와 관련 있는 & 연산자와 * 연산자 윤성우의 열혈 C 프로그래밍 Chapter 12-2. 포인터와 관련 있는 & 연산자와 * 연산자 윤성우 저 열혈강의 C 프로그래밍 개정판

변수의 주소 값을 반환하는 & 연산자 윤성우의 열혈 C 프로그래밍 & 연산자는 변수의 주소 값을 반환하므로 상수가 아닌 변수가 피연산자이어야 한다. & 연산자의 반환 값은 포인터 변수에 저장을 한다. num1은 int형 변수이므로 pnum1은 int형 포인터 변수이어야 함 int형 변수 대상의 & 연산의 반환 값은 int형 포인터 변수에, double형 변수 대상의 & 연산의 반환 값은 double형 포인터 변수에 저장한다. num2는 double형 변수이므로 pnum2는 double형 포인터 변수이어야 함.

포인터가 가리키는 메모리를 참조하는 * 연산자 윤성우의 열혈 C 프로그래밍 포인터가 가리키는 메모리를 참조하는 * 연산자 pnum이 num을 가리킨다. pnum이 가리키는 공간(변수)에 20을 저장 *pnum은 num을 의미한다. 따라서 num을 놓을 자리에 *pnum을 놓을 수 있다. pnum이 가리키는 공간(변수)에 저장된 값 출력 실행결과

다양한 포인터 형이 존재하는 이유 윤성우의 열혈 C 프로그래밍 형 불일치! 컴파일은 된다. 포인터 형은 메모리 공간을 참조하는 방법의 힌트가 된다. 다양한 포인터 형을 정의한 이유는 * 연산을 통한 메모리의 접근기준을 마련하기 위함이다. int형 포인터 변수로 * 연산을 통해 메모리(변수) 접근 시 4바이트 메모리 공간에 부호 있는 정수의 형태로 데이터를 읽고 쓴다. . double형 포인터 변수로 * 연산을 통해 메모리(변수) 접근 시 8바이트 메모리 공간에 부호 있는 실수의 형태로 데이터를 읽고 쓴다. 주소 값이 정수임에도 불구하고 int형 변수에 저장하지 않는 이유는 int형 변수에 저장하면 메모리 공간의 접근을 위한 * 연산이 불가능하기 때문이다. 형 불일치! 컴파일은 된다. pnum이 가리키는 것은 double형 변수인데, pnum이 int형 포인터 변수이므로 int형 데이터처럼 해석!.

잘못된 포인터의 사용과 널 포인터 윤성우의 열혈 C 프로그래밍 위험한 코드 위험한 코드 안전한 코드 ptr이 쓰레기 값으로 초기화 된다. 따라서 200이 저장되는 위치는 어디인지 알 수 없다! 매우 위험한 행동! 포인터 변수에 125를 저장했는데 이곳이 어디인가? 역시 매우 위험한 행동! 위험한 코드 위험한 코드 잘못된 포인터 연산을 막기 위해서 특정한 값으로 초기화하지 않는 경우에는 널 포인터로 초기화하는 것이 안전하다. 널 포인터 NULL은 숫자 0을 의미한다. 그리고 0은 0번지를 뜻하는 것이 아니라, 아무것도 가리키지 않는다는 의미로 해석이 된다. 안전한 코드

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