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

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint 프레젠테이션

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

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

설계란 무엇인가?

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

Microsoft PowerPoint - chap06-2pointer.ppt

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-1Array.ppt

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

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

11장 포인터

Microsoft PowerPoint - Chapter_08.pptx

슬라이드 1

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

PowerPoint Template

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

KNK_C_05_Pointers_Arrays_structures_summary_v02

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

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

untitled

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

Data Structure

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

8장. 포인터

Microsoft PowerPoint - 제11장 포인터

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

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

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

PowerPoint Presentation

OCW_C언어 기초

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

Microsoft PowerPoint - [2009] 02.pptx

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

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Data Structure

ch15

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

02장.배열과 클래스

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

untitled

PowerPoint 프레젠테이션

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

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

Microsoft PowerPoint - Chapter_04.pptx

: 1 int arr[9]; int n, i; printf(" : "); scanf("%d", &n); : : for(i=1; i<10; i++) arr[i-1] = n * i; for(i=0; i<9; i++) if(i%2 == 1) print

11장 포인터

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


BMP 파일 처리

Microsoft PowerPoint - ch07 - 포인터 pm0415

설계란 무엇인가?

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

Microsoft PowerPoint - C_9장 포인터 pptx

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

Microsoft PowerPoint - chap-11.pptx

C++ Programming

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

PowerPoint Presentation

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

중간고사

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

C 프로그래밊 개요

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

C 프로그래밊 개요

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

본 강의에 들어가기 전

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

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

untitled

PowerPoint Presentation

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

13 주차문자열의표현과입출력

Microsoft PowerPoint - chap06-8.ppt

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

untitled

PowerPoint 프레젠테이션

Infinity(∞) Strategy

PowerPoint 프레젠테이션

11장 포인터

기초컴퓨터프로그래밍

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

03장.스택.key

본 강의에 들어가기 전

PowerPoint Presentation

Microsoft PowerPoint - Chapter14_17.pptx

Microsoft PowerPoint - Lesson14.pptx

Microsoft PowerPoint - Lesson14.pptx

OCW_C언어 기초

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

Microsoft PowerPoint - C++ 5 .pptx

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

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

슬라이드 1

Microsoft PowerPoint - 7장 배열 pptx

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

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

Microsoft PowerPoint - chap05-제어문.pptx

Transcription:

C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과

13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음 ( 변수의이름과동일함 ) cf.) Pointer 는실행시메모리에할당됨 32 비트운영체제에서는 4 바이트할당 Department of Computer Engineering 2

13-1 포인터와배열의관계 실행결과 배열요소간주소값의크기는 4 바이트임을 알수있다 ( 모든요소가붙어있다는의미 ). Department of Computer Engineering 3

배열이름과포인터비교 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 포인터처럼실행시에배열이름에해당하는메모리 ( 주소값저장 ) 가할당되는가? 배열이름 No: 포인터와달리실행시메모리에주소값을저장하기위한공간이할당되지않음 배열자체가할당됨 a 포인터 a int a[3]; 프로그램을짤때와컴파일시까지만사용되는 Symbol 임. 실행시에는 0x1000 이사용되며, 주소값을저장하는공간이별도로할당되지않음. 배열자체가할당됨 배열 할당 int a; 프로그램을짤때와컴파일시까지만사용되는 Symbol 임. 실행시에는 0x1000 이사용되며 int 저장을위한공간이할당됨 int *pa = &a; 프로그램을짤때와컴파일시까지만사용되는 Symbol 임. 실행시에는 0x2014 가사용되며주소값을저장하는공간이할당됨 pa Department of Computer Engineering 4

배열이름 13-1 포인터와배열의관계 int main(void) { int a[5]={0, 1, 2, 3, 4}; int b=10; } a=&b; //Error! a 는실행시에메모리에존재하지않음 Department of Computer Engineering 5

실습 배열이름을포인터처럼사용가능 실행결과 Department of Computer Engineering 6

실습 포인터를배열처럼활용가능 포인터에 index 활용가능 #include <stdio.h> int main(void) { int arr[3]={0, 1, 2}; int *ptr = arr; // &arr[0] 도동일함 arr } printf("%d, %d, %d \n", ptr[0], ptr[1], ptr[2]); return 0; Department of Computer Engineering 7

포인터연산이란? 13-2 포인터연산 포인터가저장한값을증가혹은감소시키는연산을의미 ptr1++; ptr1 += 3; --ptr1; ptr2=ptr1+2; 그럴수도있고아닐수도있음 ptr 의타입에따라다름 ptr=1000 일때, (ptr+1) 은 1001 일까? * 또는 / 연산은허용될까? 안됨 Department of Computer Engineering 8

포인터연산 13-2 포인터연산 포인터가가리키는대상의자료형에따라서증가및감소되는값이차이를지님 적절치않은초기화 왼편과같이포인터변수에저장된값을대상으로하는 증가및감소연산을진행할수있다. 실행결과 예제의실행결과를통해서다음사실을알수있다. int형포인터변수대상의증가감소연산시 sizeof(int) 의크기만큼값이증가및감소한다. double형포인터변수대상의증가감소연산시 sizeof(double) 의크기만큼값이증가및감소한다. type형포인터변수대상의증가감소연산시 sizeof(type) 의크기만큼값이증가및감소한다. Department of Computer Engineering 9

포인터연산을통한배열요소의접근 실행결과 int형포인터변수의값은 4씩증가및감소를하니, int형포인터변수가 int형배열을가리키면, int형포인터변수의값을증가및감소시켜서배열요소에순차적으로접근이가능하다. Department of Computer Engineering 10

포인터와배열을통해서얻을수있는결론 Department of Computer Engineering 11

13-3 문자열상수포인터 문자열표현방식의이해 배열기반의문자열변수 포인터기반의문자열상수 총 5 bytes 메모리할당 char str1[5] char str1[]="abcd"; char *str2="abcd"; 총 9 bytes 메모리할당 ( 포인터 4 bytes + 문자열 5 bytes) Department of Computer Engineering 12

13-3 문자열상수포인터 #include <stdio.h> int main() { char str1[5]="abcd"; char *str2="abcd"; // 문자열변수선언 // 문자열상수선언 printf("%s \n", str1); printf("%s \n", str2); str1[0]='x'; str2[0]='x'; // 문자열변수변경, OK // 문자열상수변경, Error 발생 printf("%s \n", str1); printf("%s \n", str2); } return 0; Department of Computer Engineering 13

13-3 문자열상수포인터 Try this! 이건상수! Data Segment (Section) 에잡힘 #include <stdio.h> int main(void) { char *str1 = "Good!"; char *str2 = "Good!"; char str3[10] = Good! ; 이건변수! Stack 에잡힘 이걸 char str2[] = Good! ; 로바꾸면? 그럼변수가됨! Stack 에잡힘 } printf("%d, %d, %d \n", str1, str2, str3); printf( %s, %s, %s \n, str1, str2, str3); return 0; The result depends on the compiler. Department of Computer Engineering 14

포인터배열 13-4 포인터배열 배열의요소로포인터를지니는배열 int* arr1[10]; double* arr2[20]; char* arr3[30]; 18 장에서배우게될 int (*arr1)[10]; 과서로다름 ( 이건배열을가리키는포인터 ) int 를가리키는포인터가 10 개있는배열 연산자우선순위를체크하자! Department of Computer Engineering 15

13-4 포인터배열 포인터배열예제 1 #include <stdio.h> int main(void) 0x5000 0x100 저장공간의크기는포인터이므로 4Bytes (in 32 bits OS) 0x100 { 0x200 int a=10, b=20, c=30; int* arr[3]={&a, &b, &c}; 0x300 0x200 printf("%d \n", *arr[0]); printf("%d \n", *arr[1]); printf("%d \n", *arr[2]); arr, arr[0], *arr[0] 혼동하지않도록의미에유의할것! 0x300 } return 0; 표현식내용값 arr int 를저장하는 arr 배열의시작주소 0x5000 arr[0] *arr[0] int 를저장하는 arr 배열의첫번째공간 (4Bytes) 에저장되어있는변수 (a) 의시작주소 (&a) int 를저장하는 arr 배열의첫번째공간 (4Bytes) 에저장되어있는변수 (a) 의시작주소에저장된값 (a) 0x100 10 Department of Computer Engineering 16

13-4 포인터배열 포인터배열예제 2: 문자열배열 #include <stdio.h> int main(void) { char* arr[3]={ "Fervent-lecture", "TCP/IP", "Socket Programming" }; printf("%s \n", arr[0]); printf("%s \n", arr[1]); printf("%s \n", arr[2]); return 0; } 원래, ( 문자열이아닌 ) 문자가저장된주소를가리키는포인터의배열 문자열의시작문자의주소를가리키고있음을알고있으므로 %s 를사용함 ( 원래타입대로문자라면 %c 를사용했어야함 ) 0x100 0x1000 0x2000 0x3000 원래, char * 는문자가저장된주소를가리키지만, 보통, char * 는문자열의시작주소를가리키는의미로주로사용됨 0x1000 0x2000 0x3000 Dept. of Computer Engineering 17

연습문제 포인터를이용해배열을조작해보자. 문자열을입력받아그길이를출력하는프로그램을작성하자. 이때, 널문자는길이에포함하지않으며, 길이를계산하는과정에서포인터를사용해야한다. 문자열을입력받아거꾸로뒤집은다음결과를출력하는프로그램을작성하자. 이때, 뒤집는과정은포인터를사용해야한다. Department of Computer Engineering 18