Data Structure

Similar documents
Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint 프레젠테이션

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

11장 포인터

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

Microsoft PowerPoint - chap06-2pointer.ppt

Data Structure

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

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

슬라이드 1

Microsoft PowerPoint - chap06-1Array.ppt

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

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

설계란 무엇인가?

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

Microsoft PowerPoint - 제11장 포인터

PowerPoint Template

PowerPoint 프레젠테이션

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

PowerPoint 프레젠테이션

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

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

PowerPoint Presentation

Microsoft PowerPoint - chap-11.pptx

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

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

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

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

설계란 무엇인가?

untitled

Microsoft PowerPoint - 7장 배열 pptx

KNK_C_05_Pointers_Arrays_structures_summary_v02

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

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

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

8장. 포인터

OCW_C언어 기초

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

02장.배열과 클래스

Microsoft PowerPoint - C_9장 포인터 pptx

Microsoft PowerPoint - Chapter_08.pptx

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

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

11장 포인터

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

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

슬라이드 1

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

Slide 1

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

슬라이드 1

Microsoft PowerPoint - Chapter_04.pptx

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

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

ch15

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

chap 5: Trees

C 프로그래밊 개요

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

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

Microsoft PowerPoint - [2009] 02.pptx

Infinity(∞) Strategy

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

PowerPoint Presentation

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

PowerPoint 프레젠테이션

중간고사

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

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

OCW_C언어 기초

Microsoft PowerPoint - chap04-연산자.pptx

untitled

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

Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

슬라이드 1

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - ch07 - 포인터 pm0415

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

C++ Programming

기초컴퓨터프로그래밍

ABC 6장

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

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

Microsoft PowerPoint - C++ 5 .pptx

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

PowerPoint Presentation

PowerPoint Presentation

Microsoft PowerPoint - chap12-고급기능.pptx

PowerPoint Presentation

컴파일러

Microsoft PowerPoint - chap06.ppt

Frama-C/JESSIS 사용법 소개

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

BMP 파일 처리

Transcription:

Array and Pointer C- 언어의활용을위한주요기법 (2) Dong Kyue Kim Hanyang University dqkim@hanyang.ac.kr

배열

배열 (1/2) 배열 유도형자료유형의하나로기본자료유형을변형하여만들어진다. 동일한자료유형을가지는여러변수의집합 배열을구성하는데이터들을배열원소 (Element) 라고한다. 배열은하나의이름을공유 배열원소는변수와 100% 동일 변수 배열 배열원소 a4 a6 a1 a2 a3 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a0 a5 배열은하나의이름을공유한다 int a0,, a6; int a[7]; 3

배열 (2/2) 배열이필요한이유 어떤프로그램의경우변수를 100 개, 200 개선언해야하는경우가생긴다. int a1, a2, a3, a4, a5, a6, a7, a8,, a98, a99, a100; 하나하나 a1, a2,,a100 선언을하는것은시간낭비 많은양의데이터처리를위해많은변수를선언해야하는경우배열을사용함으로써시간적낭비가줄고편리해진다. int a1,, a100; int a[100]; 4

배열의구조 배열의일반적인구조 자료형배열이름 [ 크기 ] [ 크기 ] ; 자료형 : 배열의요소가어떤값들의집합인가를지정한다. int, char, double 과같이기본자료형을사용한다. 배열이름 : 배열도변수이므로이름이있어야한다. 크기 : 요소의개수가몇개인가를 [] 괄호안에정수상수로지정한다. 크기지정이하나만있으면 1 차원배열두개이상이면다차원배열이라고한다. 5

배열의선언 배열의선언 주요요소는자료형, 배열이름, 배열의크기이다. 배열의자료유형은모든기초자료형이사용가능하다. 배열의이름은변수의이름과같은규칙을갖는다. 배열의크기는반드시대괄호사이에입력하고한개이상있어야한다. 배열의크기는반드시양의상수이다. ( 변수로지정하면안된다.) 정수형 20 개짜리배열실수형 20 개씩 30 개인배열 ( 총 600 개 ) int array1[20]; double array2[20][30]; int n = 20; int array1[n]; 6

배열요소접근방법 (1/2) 인덱스 임의의위치에존재하는배열요소에접근하기위한요소의위치표시. [0] 에서 [ 크기 1] 까지있다. (1 이아닌 0 에서시작한다.) int array [5]; array [0] array [1] array [2] array [3] array [4] int int int int int 7

배열요소접근방법 (2/2) int main (void) { int array [5]; array [0] = 20; array [1] = 10; array [2] = 97; array [3] = 81; array [4] = -49; array [5] = 20; return 0; } 첫번째요소접근. 다섯번째요소접근. 배열의크기가 5 이므로에러발생. 8

배열의초기화 선언과동시에초기화 초기화리스트 int array [5] = {1,2,3,4,5}; 1 2 3 4 5 앞에서부터순서대로채워진다. int array [5] = {0,1}; 0 1 0 0 0 int array [5] = {0}; 0 0 0 0 0 초기화리스트가배열크기보다작으면나머진 0 으로채운다. 크기가 7 로잡힌다. int array [] = {1,2,3,4,5,6,7}; 1 2 3 4 5 6 7 초기화리스트의수만큼자동으로크기가잡힌다. 9

배열과메모리 배열과메모리 배열이선언되면배열의자료형 X 크기만큼의공간이메모리에할당된다. int array [10]; 4byte X 10 = 40byte 12345678 12345679 12345680 12345681 12345682 12345683 12345684 12345685 12345686 12345711 12345712 12345713 12345714 12345715 12345716 12345717 array [0] array [1] array [9] 10

다차원배열

다차원배열 다차원배열 배열이원소를배열로갖는것이다차원배열. 즉배열의배열 배열의원소가배열이고, 그원소인배열들의원소가일반자료유형 (int, char 등 ) 인경우 2 차원배열 배열의원소가배열이고, 원소인배열의원소가또배열이고, 그배열의원소가일반자료유형인경우 3 차원배열 3 차원이상의배열도가능 자료형배열이름 [ 크기 ] [ 크기 ] ; char arr1[100]; //1차원배열 int arr2[10][10]; //2차원배열 double arr3[2][4][3]; //3차원배열 2 차원배열 a 원소인배열의원소들배열의원소 a[0] a[2] a[0][0] a[0][1] a[0][2] a[1] a[1][0] a[1][1] a[1][2] a[2][0] a[2][1] a[2][2] 12

2 차원배열의선언 2 차원배열의선언 Arr[ i ][ j ] 로선언하였다면 Arr[ j ] 인배열이 i 개가있다고생각 X 4 int arr2[3][4]; int int int int arr[0][0] arr[0][1] arr[0][2] arr[0][3] int int int int arr[1][0] arr[1][1] arr[1][2] arr[1][3] X 3 int int int int arr[2][0] arr[2][1] arr[2][2] arr[2][3] 13

2 차원배열의메모리상의구조 2 차원배열의메모리할당 메모리는 2 차원적인구조가아니다. 그림과같이 1 차원구조로할당된다. a[0][0] a[0][ ] a[0][1] int arr2[3][4]; a[0][2] a[1][0] a[1][ ] a[1][1] a[1][2] 14

2 차원배열요소의접근방법 2 차원배열요소의접근방법 #include<stdio.h> int main() { } int arr[3][3]; arr[0][0]=2; arr[1][1]=4; arr[2][2]=8; arr[1][0]=3; return 0; X 3 2?? 3 4??? 8? 는쓰레기값 X 3 15

2 차원배열초기화 행단위로모든요소들을초기화 int arr2[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; X 3 1 2 3 [0][0] [0][1] [0][2] 4 5 6 [1][0] [1][1] [1][2] X 3 7 8 9 [2][0] [2][1] [2][2] 16

2 차원배열초기화 행단위로일부요소들만초기화 int arr2[3][3] = { {1}, {4, 5}, {7, 8, 9} }; X 3 1 0 0 [0][0] [0][1] [0][2] 4 5 0 [1][0] [1][1] [1][2] X 3 7 8 9 [2][0] [2][1] [2][2] 17

2 차원배열초기화 1 차원배열형태로초기화 int arr2[3][3] = { 1, 2, 3, 4, 5, 6, 7}; X 3 1 2 3 [0][0] [0][1] [0][2] 4 5 6 [1][0] [1][1] [1][2] X 3 7 0 0 [2][0] [2][1] [2][2] 18

2 차원배열초기화 배열크기를가르쳐주지않고초기화 2 차원배열도 1 차원과마찬가지로선언과동시에초기화할경우그크기를명시하지않아도된다. 배열의크기선언의위치에서앞의크기는알려주지않아도되지만, 뒤의크기는꼭알려주어야한다. 뒤의크기는알려주어야한다. 앞의것만알려줄경우컴파일에러가난다. int arr2[ ][4] = { 1, 2, 3, 4, 5, 6, 7, 8 }; int arr2[ ][5] = { {1, 2, 3}, {4, 5, 6, 7, 8} }; int arr2[ ][6] = { {1, 2, 3}, {4, 5, 6, 7, 8} }; 19

2 차원배열초기화 2 차원배열초기화중뒤크기를가르쳐주어야하는이유 배열 a [ i ][ j ] 를메모리할당을할때 a [ j ] 가 i 개만큼있는것으로메모리가할당 a [ j ] 가결정되어야그만큼의크기의간격으로메모리를할당 int a[ ][ ] = { 1, 2, 3, 4, 5, 6, 7, 8 }; a[0][ ] a[0][0] a[0][1] 위와같이선언할경우컴퓨터는 2x4 로할지, 3x3 인것인데하나가초기화안된것할지 4x2 개로할지등여러경우가생겨배열의메모리할당이불가능해진다. int a[3][ ] = { 1, 2, 3, 4, 5, 6 }; a[0][2] a[1][0] 위와같이앞의크기만알려주어도 2x3 인지, 3x3 인데일부가초기화되지않은것인지알수없다. 메모리할당의구조상 ixj 에서 j 가추가되는것은구조변화없이연장만하면됨으로쉽지만 i 가잘못결정되어추가되는것은전체구조의변화를필요로하기때문에어렵다. a[1][ ] a[1][1] a[1][2] 20

포인터

포인터의개요 포인터 포인터는 C 언어를다른언어들과차별화시키는특징 포인터를이용하면기계어나어셈블리어처럼메모리주소를사용해직접메모리에접근하여데이터조작이가능 배열과함수를포인터와사용하면효율적인프로그래밍이가능 포인터는메모리공간의주소를값으로갖는변수 포인터는변수지만자료값이아닌, 자료가있는메모리영역의주소값을갖는변수 포인터의정확한이해를위해서, 기존에배운변수와포인터변수의차이점과서로의관계를이해해야할필요가있다. 블랙홀이뭐야? 블랙홀을설명하자면블랙홀은일반상대성이론을통해예측된천체야. 별이폭발할때반지름이극단적인수축... 블랙홀의설명은백과사전 520 쪽에있어! 일반변수 포인터변수 22

기존의변수와포인터변수 기존의변수 메모리공간을사용하기편하게이름지은것이변수의이름 변수가갖는데이터는우리가주로연산에사용할피연산자 포인터변수와기존의변수의관계 포인터변수가갖는데이터는메모리공간의주소 변수의주소는메모리공간의주소 즉, 포인터는데이터로다른변수의주소를갖고있다. 포인터변수는다른변수를가리키고 (point) 있다. 21 a = [12345678] ( 메모리공간의이름 ) 기존의변수 데이터 ( 메모리공간의주소 ) 12345678 = &a (a 라는메모리공간의주소 ) ptr 포인터변수 12345678 12345679 12345680 12345681 12345682 12345683 12345684 12345685 12345686 12345687 12345688 a = 21 ptr = 12345678 23

포인터선언 포인터선언 포인터는가리키고자하는기본자료형에 * 연산자를붙여서선언 * 연산자를주위로띄어쓰기는상관이없다. int *a; char *b; double *c; int 형변수의주소값을지닐수있는 int 형포인터 char 형변수의주소값을지닐수있는 char 형포인터 double 형변수의주소값을지닐수있는 double 형포인터 int *a; int* a; int * a; 모두같은선언이다. 메모리의주소값은항상 4byte (32bit) 이기때문에포인터변수는모두 4byte 포인터는가급적이면선언과동시에초기화를시켜주는것이좋다. 이유는뒤에서설명 24

& 연산자 주소연산자 & 변수 ( 메모리공간 ) 의주소를알려주는연산자 변수의이름앞에 & 연산자를붙이게되면해당변수의주소값이반환된다. #include <stdio.h> int main(void) { int a = 2005; printf( 변수 a 의메모리주소는 %d 입니다.\n, &a); printf( 변수 a 의메모리주소는 %X 입니다.\n, &a); return 0; } < 결과 > 변수 a 의메모리주소는 1245024 입니다. 변수 a 의메모리주소는 12FF60 입니다. 25

* 연산자 간접참조연산자 * 포인터가가리키는주소에있는값을읽거나변경하도록하는연산자 포인터는단순히메모리주소만저장하는기능이외에도포인터가가리키는주소 ( 메모리공간의주소, 변수의주소 ) 에서값을읽거나변경할수있다. 포인터변수앞에 * 연산자를붙이면포인터가가리키는메모리공간에존재하는값을참조하겠다는뜻 이것을간접참조 (indirection) 라한다. 12345678 = &a (a 라는메모리공간의주소 ) 21 void main(void) { int * ptr; int a = 21; 포인터변수 ptr 에 &a (a 의메모리주소 ) 를저장 ptr 포인터변수 a = [12345678] ( 메모리공간의이름 ) int 변수 } prt = &a; printf( %d\n, ptr); printf( %d\n,*ptr); < 결과 > 12345678 21 *pa 는변수 a 자체를의미 26

다양한포인터변수타입 포인터변수의자료유형이다양하게존재하는이유 포인터변수는가리키는자료유형에상관없이모두 4byte 로크기가똑같다. Memory 의주소가 32bit(4byte) 이기때문 char *, int *, double * 모두크기가같음 포인터는자료의첫번째 byte( 첫번째메모리공간 ) 을가리킨다. 자료유형에따라메모리를참조할때몇바이트읽어야하는지알아야함. char * 는주소가가리키는메모리공간의 1byte 만, double * 은 8byte #include <stdio.h> int main(void) { char *pa, a=10; int *pb, b=20; double *pc, c=30; pa = &a; pb = &b; pc = &c; < 결과 > 10의메모리주소 : 1245010 20의메모리주소 : 1244988 30.00의메모리주소 : 1244960 } printf("%d 의메모리주소 : %d\n", a, pa); printf("%d 의메모리주소 : %d\n", b, pb); printf("%.2lf 의메모리주소 : %d\n", c, pc); return 0; 27

다양한포인터변수타입 char 형포인터이므로해당주소에서 1byte 참조한다. int 형포인터이므로해당주소에서 4byte 참조한다. double 형포인터이므로해당주소에서 8byte 참조한다. 1245015 a = 10 1244988 1244989 1244990 1244991 b = 20 1244960 1244961 1244962 1244963 1244964 1255965 1255966 1255967 c = 30 pa = 1245015 pb = 1244988 pc = 1244960 28

포인터형변환 포인터형변환 포인터변수는자동형변환이불가능하다. 형변환을하고싶은경우에는강제형변환을해야한다. #include <stdio.h> int main(void) { char *pa; int a=256; pa = (char*)&a; printf("pa : %d\n", pa); printf("*pa : %d\n", *pa); return 0; } int 형변수 a 에서 1byte 만참조하게된다. < 결과 > pa = 1245012 *pa = 0 29

포인터변수의초기화 포인터변수의초기화 포인터변수는초기화가매우중요 메모리영역중에는시스템이현재사용하는중요한부분이많다. 포인터변수의잘못된초기화이후자료를조작하는것은시스템에치명적인문제를야기시킴 시스템이사용하는중요한메모리영역의값을변경하는경우 잘못된초기화의예시 #include <stdio.h> 만약 100 이란메모리주소가다른시스템에서아주중요한부분이라면시스템전체에심각한문제가발생할수도있다. 다행히요즘의운영체제는이러한문제의경우실행을허용하지않고중지시켜버린다. int main(void) { int *pa = 100; *pa = 10; return 0; } 30

포인터변수의초기화 포인터변수의초기화 포인터변수를초기화하지않고사용하는경우 포인터는쓰레기값을가져임의의주소를가리키게됨. 이상태에서포인터를이용하여메모리의내용을변경한다면문제발생 int main (void) { int *p ; // 포인터 p는초기화가안되어있음 } *p = 100; return 0; 아주위험한코드 NULL 포인터의사용 포인터가아무것도가리키고있지않을때는 NULL(0) 으로설정 NULL은 stdio.h에서 0으로정의 주소 0의경우엑세스하려고하면시스템에서자동적으로오류를감지하고해결 int *p = NULL; p 가아무것도가리키고있지않다고시스템이인식함으로써해결 31

배열과포인터

배열과포인터 포인터와배열의관계 배열이름도포인터 ( 배열의이름은포인터상수 ) 배열이름에는첫번째배열원소의메모리의주소값이저장 #include <stdio.h> int main(void) { int a[5] = {1,2,3,4,5}; printf ("%d, %d\n", a[0], a[1]); printf ("%d, %d\n", &a[0], &a[1]); printf (" 배열이름 : %d\n", a); return 0; } a[0] = 1 a[1] = 2 a &a[0] &a[1] < 결과 > 1, 2 1245008, 1245012 배열이름 : 1245008 배열이름을출력하면포인터와같이메모리주소가출력 33

배열과포인터 배열이름은수정이불가능한포인터 보통의포인터변수의경우가리키는곳을변경가능 배열의이름은가리키는곳 ( 메모리의주소 ) 이수정불가능 배열의이름은포인터변수가아닌상수포인터 #include <stdio.h> int main(void) { int a[5] = {1,2,3,4,5}; int b = 10; a = &b; return 0; } a 는상수포인터이므로에러가발생한다. 34

배열과포인터 배열이름의포인터타입 배열이름도포인터이므로그에따른포인터타입이존재 배열의요소의타입이그대로포인터타입 int arr1[20]; double arr2[30]; 배열의요소가 int 형배열이름 arr1 은 int 형포인터 (int *) 배열의요소가 double 형배열이름 arr2 는 double 형포인터 (double *) 35

배열과포인터 포인터를배열처럼사용하기 배열이름이포인터이므로당연히포인터를배열이름처럼사용가능 변수에숫자를저장해서상수처럼쓰는것과마찬가지 #include <stdio.h> int main(void) { int arr[3] = {1,3,5}; int *ptr; ptr[0] : 1 ptr[1] : 3 ptr[2] : 5 < 결과 > } ptr = arr; printf("ptr[0] : %d\n", ptr[0]); printf("ptr[1] : %d\n", ptr[1]); printf("ptr[2] : %d\n", ptr[2]); return 0; 36

포인터와연산

포인터연산 포인터연산 포인터연산이란포인터값을증가혹은감소시키는연산을말한다. 포인터가참조하는부분을연산하는것이아니라포인터안에저장된주소값을증가시키거나감소시키는것을말한다. int *ptr, *ptr2; ptr = 0; ptr2 = 10000; ptr = ptr + 1; ptr2 = ptr2 1; 연산결과 : ptr = 1 ptr2 = 9999 위와같은결과가나타날까? 38

포인터연산 포인터연산의의미 포인터연산에따른실질적인값의변화는타입에따라다르다. 포인터는가리키는데이터타입의크기 (byte) 만큼곱해져서증가하거나감소 double * 의경우 double 의크기 (byte 단위 ) 인 8 만큼증가, 감소 #include <stdio.h> int main(void) { char *ptr1=0; int *ptr2=0; double *ptr3 = 0; 포인터를 0 으로초기화시키면아무것도가리키지않는다는의미 } printf(" 증가시키기전 : %d, %d, %d\n", ptr1, ptr2, ptr3); printf("1 증가시킨후 : %d, %d, %d\n", ++ptr1, ++ptr2, ++ptr3); printf(" 추가로 3 증가 : %d, %d, %d\n", ptr1+3, ptr2+3, ptr3+3); return 0; < 결과 > 증가시키기전 : 0, 0, 0 1 증가시킨후 : 1, 4, 8 추가로 3 증가 : 4, 16, 32 39

포인터연산과배열 포인터연산을이용한배열의사용 포인터연산이자료형만큼증가하거나감소하는특징을이용해배열을호출 #include <stdio.h> parr int main(void) { int arr[5] = {1,2,3,4,5}; int *parr = arr; printf("%d \n", *parr); printf("%d \n", *(++parr)); printf("%d \n", *(++parr)); printf("%d \n", *(parr+1)); printf("%d \n", *(parr+2)); return 0; } 포인터연산을이용해배열을다룰때범위를넘어가는접근을하지않도록주의 1 2 3 4 5 < 결과 > arr[0] = 1 arr[1] = 2 arr[2] = 3 ++parr 연산 ++parr 연산 40

포인터연산예제 #include <stdio.h> int main(void) { int arr[5] = {1,2,3}; int *parr = arr; 배열의주소와원소값에대해각각의 3 가지표현모두같은것을확인가능 } printf("%d %d\n", arr[0], arr[1]); printf("%d %d\n", *arr, *(arr+1)); printf("%d %d\n", parr[0], *(parr+1)); return 0; < 결과 > 1, 2 1, 2 1, 2 41