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

Similar documents
Microsoft PowerPoint - ch07 - 포인터 pm0415

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

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

Data Structure

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

PowerPoint 프레젠테이션

11장 포인터

PowerPoint 프레젠테이션

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

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

Microsoft PowerPoint - chap06-2pointer.ppt

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

untitled

Microsoft PowerPoint - chap06-1Array.ppt

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

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

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

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

Microsoft PowerPoint - Chapter_08.pptx

Microsoft PowerPoint - 제11장 포인터

KNK_C_05_Pointers_Arrays_structures_summary_v02

PowerPoint Template

ch15

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

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

untitled

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

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

Microsoft PowerPoint - chap-11.pptx

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

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

슬라이드 1

설계란 무엇인가?

Microsoft PowerPoint - ch07 - 포인터 pm0415

OCW_C언어 기초

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

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

PowerPoint Presentation

02장.배열과 클래스

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

Infinity(∞) Strategy

설계란 무엇인가?

Microsoft PowerPoint - [2009] 02.pptx

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

Microsoft PowerPoint - C_9장 포인터 pptx

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

untitled

Data Structure

쉽게 풀어쓴 C 프로그래밍

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

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

Microsoft PowerPoint - 7장 배열 pptx

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

8장. 포인터

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

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

6.1 Addresses and Pointers Recall memory concepts from Ch2 ch6_testbasicpointer.c int x1=1, x2=7; double distance; int *p; int q=8; p = &q; name addre

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

C++ Programming

중간고사

Microsoft PowerPoint - Chapter_04.pptx

PowerPoint 프레젠테이션

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

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

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

ABC 6장

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

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

; 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

Microsoft PowerPoint - chap-03.pptx

11장 포인터

14 주차구조체와공용체

PowerPoint Presentation

Microsoft PowerPoint - chap04-연산자.pptx

OCW_C언어 기초

Microsoft PowerPoint - chap-05.pptx

C 언어의구성요소인상수, 변수, 입 출력함수에 대하여학습

歯7장.PDF

chap7.PDF

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - Lesson2.pptx

OCW_C언어 기초

PowerPoint Presentation

Microsoft PowerPoint - chap-06.pptx

컴파일러

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

, ( ),, ( ), 3, int kor[5]; int eng[5]; int Microsoft Windows 4 (ANSI C2 ) int kor[5] 20 # define #define SIZE 20 int a[10]; char c[10]; float

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap09-1.ppt

기초컴퓨터프로그래밍

Microsoft PowerPoint - 제3장-배열.pptx

chap10.PDF

Microsoft PowerPoint - chap12-고급기능.pptx

C 프로그램의 기본

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

Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Transcription:

제 8 장. 포인터

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

포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3

포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해 * 기호를사용 포인터변수명은일반변수명을지정할때와같은규칙을 따름 C 4

포인터의개요 포인터변수선언및의미 포인터변수 ptr 에일반변수 a 의주소가대입 C 5

포인터의개요 포인터구조 char ch[4]={ a, b, c, d ); char *ptr; ptr = ch; 포인터변수 ptr 에문자변수 a a, b, c, d 의주소가 순차적으로대입 C 6

포인터변수와일반변수의관계 #include<stdio.h> void main(void) { char ch a int i 10 float f 0.55 char *ptr_c int *ptr_i float *ptr_f ptr_c &ch ptr_i &i ptr_f &f printf( ch %c, i %d, f %f n, ch, i, f) printf( ch %d, i %d, f %d n, &ch, &i, &f) printf( n ptr_c %d, ptr_i %d, ptr_f %d n, ptr_c, ptr_i, ptr_f) C 7

포인터변수와일반변수의관계 [ ] ch a, i 10, f 0.550000 ch 1245052, i 1245048, f 1245044 : ptr_c 1245052, ptr_i 1245048, ptr_f 1245044 C 8

포인터의개요 포인터연산 포인터변수는주소에관한연산만가능 주소는정수에대한연산만가능 덧셈, 뺄셈의연산은가능하나, 곱셈, 나눗셈의연산은불가능 포인터변수에정수덧셈, 뺄셈연산은주소값에대한연산 * 연산자는포인터변수가가리키는주소의실제값 C 9

포인터의개요 포인터연산 int *p ( 1000 ) p+1 1000 1000 + 1 * 4Byte( ) 1004( ) p+5 1000 + 5 * 4Byte( ) 1020( ) p 2 1000 2 * 4Byte( ) 992( ) 포인터의연산은정수만큼의주소를전 후로이동한주소의연산 포인터변수의연산 실제주소 = 포인터가가리키는주소 + 정수 포인터변수 데이터형크기 C 10

포인터의개요 포인터연산 (* 연산자및증가 감소연산수식이존재 ) int a, b[2] {10, 20 int *p p b // p &b[0] b p C 11

문자배열과포인터변수 #include<stdio.h> void main(void) { char ch[4] { a, b, c, d char *ptr ptr ch printf( ch[0] %c, ch[1] %c, ch[2] %c, ch[3] %c n, ch[0], ch[1], ch[2], ch[3]) printf( ch[0] %d n ch[1] %d n ch[2] %d n ch[3] %d n, &ch[0], &ch[1], &ch[2], &ch[3]) printf( n % %d n % %d n %d n %d n, ptr, ptr+1, ptr+2, ptr+3) [ ] ch[0] a, ch[1] b, ch[2] c, ch[3] d ch[0] 1245052 ch[1] 1245053 ch[2] 1245054 ch[3] 1245055 : 1245052 1245053 1245054 1245055 C 12

Call for Value( 호출함수에값을전달 ) #include<stdio.h> void change(int x, int y) void main(void) { int a 3, b 5 printf( a %d, b %d n, a, b) change(a, b) printf( a %d, b %d n, a, b) void change(int x, int y) { int temp temp x x y y temp printf( change a %d, b %d n, x, y) [ ] a 3, b 5 change a 5, b 3 a 3, 3 b 5 C 13

Call for Reference( 호출함수에주소전달 ) #include<stdio.h> void change(int *x, *int y) void main(void) { int a 3, b 5 printf( a %d, b %d n, a, b) change(&a, &b) printf( a %d, b %d n, a, b) void change(int *x, int *y) { int temp temp *x *x *y *y temp printf( change a %d, b %d n, *x, *y) [ ] a 3, b 5 change a 5, b 3 a 5, 5 b 3 C 14

배열과포인터 1 차원배열과포인터 int a {1, 2, 3, 4, 5 int *p p a // p &a[0] 포인터변수에 1 차원배열을대입 1 차원배열의데이터가저장되기시작하는곳의주소가전달 메모리공간을한정하지않고, 필요한만큼사용가능 배열명이나타내는주소값은상수주소값 (&) C 15

배열과포인터 1 차원배열명주소상수 int point[] {1, 2, 3, 4, 5 배열명의주소상수를이용하여주소를표현 (point == &point[0]) 배열명을이용한실제데이터값의표현 (*point == point[0]) 배열명은주소상수, 포인터변수는주소를변수로취급 C 16

1 차원배열과포인터의관계 #include<stdio.h> void main(void) { int a[4] {1, 2, 3, 4 int *pi, index pi a for(index 0 index < 4 ++index) { printf( a[%d] : %u, a[%d] :%d n, index, &a[index], index, a[index]) printf( pi pi + %d : %u, *(pi+%d) : %d n, index, pi + index, index, *(pi+index)) printf( a[%d] : %u, a[%d] :%d n n, index, a+index, index, *(a+index)) [ ] a[0] : 1245040, a[0] :1 pi + 0 : 1245040, *(pi+0) : 1 a[0] 1245040 : 1245040, a[0] 1 :1 a[1] : 1245044, a[1] :2 pi + 1 : 1245044, *(pi+1) : 2 a[1] : 1245044, a[1] :2 (3, 4 ) C 17

배열과포인터 다차원배열과포인터 배열의첨자가 2 개이상인배열과포인터의관계 2 차원배열요소의데이터표현 int a[2][3] {{1, 2, 3, {4, 5, 6 (a) 2 (b) C 18

배열과포인터 2 C 19

배열과포인터 2 차원배열명주소상수및포인터의표현 int a[2][3], *ptr ptr a C 20

포인터의구조 배열포인터 배열을가리키는포인터 배열이시작되는곳의주소를가리키는포인터변수를선언하는 의미 (* ) [ ] int *pa int (*pb)[2] int (*pc)[2][3] *pa 가 1 차원배열포인터 (*pb)[2] 가 2 차원배열포인터 (*pc)[2][3] 은 3 차원배열포인터 C 21

배열포인터의표현 #include<stdio.h> void main(void) { int a[2][3] {{1, 2, 3, {40, 50, 60 int *pa, index, i, j int (*ppa)[3] pa a ppa a for(i 0 i <2 ++i) for(j 0 j < 3 ++j) printf( 2 a[%d][%d] %d n, i, j, a[i][j]) for(index 0 index < 6 ++index) printf( 1 2 a %d n, *(pa+index)) for(i 0 i < 2 ++i) for(j 0 j < 3 ++j) printf( 2 2 a %d n, *(*(ppa+i)+j)) (ppa+i)+j)) C 22

배열포인터의표현 [ ] 2 [0][0] a[0][0] 1 2 a[0][1] 2 2 a[0][2] 3 2 a[1][0] [ ] 50 2 a[1][2] 60 1 2 a 1 1 2 a 2 1 2 a 3 1 2 a 40 1 2 a 50 1 2 a 60 2 2 a 1 2 2 a 2 2 2 a 3 2 2 a 40 2 2 a 50 2 2 a 60 C 23

포인터의구조 포인터배열 포인터변수를배열의요소로선언 배열의개수만큼의포인터변수가존재 각배열의시작메모리의주소값을포인터변수로선언 * [ ] int *pa[2] 주의사항 배열포인터와달리포인터변수명에괄호 () 사용안함 C 24

포인터의구조 2 차원배열및포인터배열 char a[4][6] { ONE, TWO, THREE, FOUR char *pa[4] { ONE, TWO, THREE, FOUR C 25

포인터의구조 중첩포인터 포인터를여러개겹쳐쓰는것 주소의주소값을표현 (* 를겹쳐사용하여선언 ) ** int i 10 int *pi, **ppi pi &i ppi &pi i C 26

중첩포인터의사용 #include<stdio.h> void main(void) { int i 100 int *pi, **ppi pi &i ppi &pi printf( i %u, t i %d n, &i, i) printf( i %u, i : %d n, pi, *pi) printf( i %u, i : %d n, &ppi, **ppi) [ ] i 1245052, i 100 i 1245052, i : 100 i 1245044, i : 100 C 27

실무응용예제 ( 초급 ) 1., 1 #include <stdio.h> 2 #include <math.h> 3 #define N 10 4 int mid_ find(double, double *); 5 6 void main(void) 7 { 8 9 10 11 12 13 14 15 16 17 18 19 int i; double mid=0.0, num[n]; printf( 숫자 10개를입력하시오...\n ); for( i=0; i<n; i++ ){ printf( 숫자 %2d:, i+1); scanf( %lf, &num[i]); mid += num[i]; mid /= N; i=mid_find(mid, num); printf( 중간값 %.2lf 과제일가까운값은 %.2lf 입니다., mid, num[i]); C 28

실무응용예제 ( 초급 ) 1., ( ) 21 22 23 24 25 26 27 28 29 30 31 32 33 34 int mid_find(double mid, double *num) { int i, nval=0; double value, min; min=fabs(*num-mid); for( i=1; i<n; i++ ) { value=fabs(*(num+i)-mid); id) if ( min > value ) { min=value; nval=i; return nval; C 29

실무응용예제 ( 초급 ) 2. 1 #include <stdio.h> 2 3 void main(void) 4 { 5 int i=0; 6 char ch[100]; 7 8 printf( 문자열또는한문장을입력하시오...\n ); 9 gets(ch); 10 while( *(ch+i) ) 11 i++; 12 printf( 입력된문장을거꾸로출력합니다...\n ); 13 while( i-- > 0 ) 14 putch( *(ch+i) ); 15 C 30

실무응용예제 ( 중급 ) 3. 1 #include <stdio.h> 2 3 void main(void) 4 { 5 int in1[2][3]={{1, 2, 3, {4, 5, 6, out[2][2]={0,0,0,0; 6 int in2[3][2]={{1, 2, {3, 4, {5, 6; 7 int i, j, k; 8 for(i=0; i<2;i++) 9 { 10 for(j=0; j<2; j++) 11 { 12 13 14 15 16 17 18 19 20 for(k=0; k<3; k++) { *(*(out+i)+j) += *(*(in1+i)+k) * *(*(in2+k)+j); printf( %d, *(*(out+i)+j)); ( printf( \n ); C 31

실무응용예제 ( 중급 ) 4. 1 #include <stdio.h> 2 #include<math.h> 3 4 void main(void) 5 { 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 int i, x[]={1, 3, 1, y[]={1, 3, 3; int *px=x, *py=y; float length[3], *plength=length; printf( 삼각형의꼭지점의좌표 :\n ); printf( A(x, y)=a(%d, %d)\n, *px, *py); printf( B(x, ( y)=b(%d, %d)\n, *(px+1), *(py+1)); printf( C(x, y)=c(%d, %d), *(px+2), *(py+2)); printf( \n\n삼각형의각변의길이 :\n ); for( i=0; ; i<3; ; i++) ){ *(plength+i)=sqrt( pow(*(px+(i+1)%3)-*(px+i), 2) + pow(*(py+(i+1)%3)-*(py+i), 2)); printf( %.2f, *(plength+i)); C 32

실무응용예제 ( 고급 ) 5. 3 10 2 1 #include <stdio.h> 2 3 void main(void) 4 { 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 int i, in; int out[16]={0, *pout=out; printf( 양의 3자리 10진수를입력하시오 : ); scanf( %d, &in); for(i=0; in;i++) { *(pout+i)=in % 2; in /= 2; printf( 2 진수 : ); while( i-- > 0) printf( %1d, *(pout+i)); C 33