PowerPoint 프레젠테이션

Similar documents
Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - chap06-1Array.ppt

untitled

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

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

PowerPoint 프레젠테이션

OCW_C언어 기초

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

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

11장 포인터

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

PowerPoint 프레젠테이션

슬라이드 1

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

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 - 제11장 포인터(강의)

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

Microsoft PowerPoint - chap-11.pptx

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

Microsoft PowerPoint - 제11장 포인터

untitled

03장.스택.key

PowerPoint 프레젠테이션

설계란 무엇인가?

KNK_C_05_Pointers_Arrays_structures_summary_v02

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

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

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - Chapter_08.pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - 2장 변수와 자료형 pptx

PowerPoint Template

Microsoft PowerPoint - chap04-연산자.pptx

Data Structure

untitled

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

ch15

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

5.스택(강의자료).key

Infinity(∞) Strategy

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

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - 7장 배열 pptx

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

OCW_C언어 기초

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

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

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

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

Chapter 4. LISTS

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

PowerPoint Presentation

Microsoft PowerPoint - C_9장 포인터 pptx

Microsoft PowerPoint - Chapter_04.pptx

쉽게 풀어쓴 C 프로그래밍

중간고사

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Visual Basic 반복문

: 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

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

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

OCW_C언어 기초

쉽게 풀어쓴 C 프로그래밍

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

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

Chapter_06

02장.배열과 클래스

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

Chapter 4. LISTS

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

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

PowerPoint Presentation

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

Microsoft PowerPoint - 10장 문자열 pptx

쉽게 풀어쓴 C 프로그래밍

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

11장 포인터

Data Structure

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

C 프로그래밊 개요

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

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

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

PowerPoint Presentation


PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

chap 5: Trees

ABC 6장

Infinity(∞) Strategy

PowerPoint 프레젠테이션

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

설계란 무엇인가?

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>

03_queue

Transcription:

Chapter 10 배열과포인터...

1. 스택 2. 메모리와주소 3. 포인터 4. 배열과포인터의관계

1. 스택 스택의이해 한쪽끝이막혀있는구조 가장먼저들어간것이가장나중에나옴 : LIFO(Last In First Out) 용어 top( 탑 ) : 가장마지막에들어간데이터의위치를가리킴 push( 푸쉬 ) : 데이터를넣는것 pop( 팝 ) : 데이터를빼는것

1. 스택 배열로스택만들기 자동차 5 대가들어가지만한쪽이막힌터널만들기 초기화

1. 스택 자동차 A 를넣기 top 값 : 0 1 top 위치 : stack[0] stack[1] 자동차 B 와 자동차 C 를터널에넣기 top 값 : 1 2 3 top 위치 : stack[0] stack[1] stack[2]

1. 스택 자동차 1 대빼기 top 값 : 3 2 top 위치 : stack[2] stack[1]

[ 기본 9-1] 스택의구현예 1 01 #include <stdio.h> 02 03 int main( ) 04 { 05 char stack[5]; 06 int top=0; 07 08 stack[top] = 'A'; 09 printf(" %c 자동차가터널에들어감 \n", stack[top]); 10 top ++; 11 12 stack[top] = 'B'; 13 printf(" %c 자동차가터널에들어감 \n", stack[top]); 14 top ++; 15 16 stack[top] = 'C'; 17 printf(" %c 자동차가터널에들어감 \n", stack[top]); 18 top ++; 19 20 printf("\n"); 21 --- 스택과 top 의초깃값을선언한다. --- 스택에값이들어간후 top 값이 1 만큼증가했다. --- 스택에값이들어간후 top 값이 1 만큼증가했다. --- 스택에값이들어간후 top 값이 1 만큼증가했다.

[ 기본 9-1] 스택의구현예 1 22 top --; 23 printf(" %c 자동차가터널을빠져나감 \n", stack[top]); 24 stack[top] = ' '; 25 26 top --; 27 printf(" %c 자동차가터널을빠져나감 \n", stack[top]); 28 stack[top] = ' '; 29 30 top --; 31 printf(" %c 자동차가터널을빠져나감 \n", stack[top]); 32 stack[top] = ' '; 33 } ---top 값을 1 씩줄이면서스택에서값을하나씩빼낸다. ---top 값을 1 씩줄이면서스택에서값을하나씩빼낸다. ---top 값을 1 씩줄이면서스택에서값을하나씩빼낸다.

1. 스택 오류발생경우와대처 top 값이 0 일때, 자동차를빼라고명령하는경우 8~10 행, 12~14 행, 16~18 행 : 오류대비소스추가 오류발생

1. 스택 오류발생경우와대처 top 값이 5 일때, 자동차를넣으라고명령하는경우 22~24 행, 26~28 행, 30~32 행 : 오류대비소스추가 오류발생

[ 응용 9-2] 스택의구현예 2 01 #include <stdio.h> 02 03 int main( ) 04 { 05 char stack[5]; 06 int top=0; 07 08 char carname = 'A'; 09 int select=9; 10 11 while (select!= 3) 12 { 13 printf("<1> 자동차넣기 <2> 자동차빼기 <3> 끝 : "); 14 scanf_s("%d", &select); 15 --- 자동차이름을 A 부터시작한다. --- 사용자가선택할작업을입력할변수다. --- 사용자가 3 을선택하지않으면 while 문을반복한다. --- 사용자가선택하는값이다.

[ 응용 9-2] 스택의구현예 2 16 1 17 { 18 case 1: 19 if ( 2 ) 20 { printf(" 터널이꽉차서차가못들어감 \n"); } 21 else 22 { 23 stack[top] = carname++ ; 24 printf(" %c 자동차가터널에들어감 \n", stack[top]); 25 top ++; 26 } 27 break; 28 ----- 사용자가 1( 넣기 ) 을선택하면실행한다. ------ 이미터널에 5 대가있다면더못들어간다. ------ 빈곳이있을경우 (5 대미만이있으면 ) 자동차를넣고, top 을 1 증가시킨다. ------switch 문을벗어난다.

[ 응용 9-2] 스택의구현예 2 29 case 2: 30 if ( ) 31 { printf(" 빠져나갈자동차가없음 \n"); } 32 else 33 { 34 top --; 35 printf(" %c 자동차가터널에서빠짐 \n", stack[top]); 36 stack[top] = ' '; 37 } 38 break;. 39 40 case 3: 41 printf(" 현재터널에 %d 대가있음.\n", top); 42 printf(" 프로그램을종료합니다.\n");. 43 break; 44 45 default : 46 printf(" 잘못입력했습니다. 다시입력하세요. \n"); 47 } 48 } 49 } ---- 사용자가 2( 빼기 ) 를선택하면실행된다. ------ 터널에자동차가한대도없다면빼낼차가없다. ------빼낼자동차가있으면 (1대이상이있으면 ) top을 1 감소하고자동차를빼낸다. 그리고빠져나간자리를빈칸으로채운다. --- 사용자가 3( 끝 ) 을선택하면현재자동차수를출력하고종료한다. --- 사용자가 1, 2, 3 외의값을입력하면처리된다.

[ 응용 9-2] 스택의구현예 2

1. 스택 1 자동차넣기 : 19행 ~27행 top이 5라면 더이상자동차가들어가지못한다는메시지를출력 break 문에의해밖으로나간후다시 while 문으로이동 top 이 5 미만 스택에현재자동차를넣은후에자동차이름을하나증가시킴 들어간자동차이름을출력한후 top을증가시킴 switch 문을빠져나감 2 자동차빼기 : 30행 ~38행 top이 0이라면 더이상빼낼자동차가없다는메시지를출력 break 문에의해밖으로나간후다시 while 문으로이동 top 이 0 보다크면 top 값을감소시킴 빠져나간자동차이름을출력한후, 자동차가빠진곳에공백 ( ) 을채움 switch 문을빠져나감

1. 스택 3 끝 : 41~43 행 현재터널에들어있는자동차의대수 (top) 출력 프로그램을종료한다는메시지출력 switch 문을빠져나간후 while 문으로이동 select가 3이므로 while 문을종료하며프로그램을빠져나옴 그외의값입력시 default: 부분수행 잘못입력되었다는메시지출력 switch 문을빠져나간후 while 문으로이동 select가 3이므로 while 문을종료하며프로그램을빠져나옴

2. 메모리와주소 메모리구조와주소 정수형변수의메모리할당 메모리는바이트 (Byte) 단위로나뉘며, 각바이트에는주소가지정됨. 정수형변수의크기는 4바이트이므로이메모리에정수형변수 a를선언하면임의의위치에 4바이트가자리잡음. 변수가위치하는곳 : 주소 (address) 변수의주소를알려면변수앞에 & 를붙임 a 의주소 (&a) = 1036 번지, b 의주소 (&b) = 1040 번지

[ 기본 9-3] 변수의주소알아내기 01 #include <stdio.h> 02 03 int main( ) 04 { 05 int a = 100; 06 int b = 200; 07 08 printf(" 변수 a 의주소는 %d 입니다. \n", &a); 09 printf(" 변수 b 의주소는 %d 입니다. \n", &b); 10 } ---a 와 b 의주소를출력한다.

2. 메모리와주소 정수형배열의메모리할당 배열의주소표현 aa[0] 의주소 (&aa[0]) = 1031번지 aa[1] 의주소 (&aa[1]) = 1035번지 aa[2] 의주소 (&aa[2]) = 1039번지 배열이름 aa = 전체배열의주소 = 1031 번지 배열 aa 의주소를구할때는 & 를쓰지않고, 단순히 aa 로표현

[ 기본 9-4] 정수형배열의메모리할당 1 01 #include <stdio.h> 02 03 int main( ) 04 { 05 int aa[3] = {10, 20, 30}; 06 07 printf("aa[0] 의값은 %d, 주소는 %d \n", aa[0], &aa[0]); 08 printf("aa[1] 의값은 %d, 주소는 %d \n", aa[1], &aa[1]); 09 printf("aa[2] 의값은 %d, 주소는 %d \n", aa[2], &aa[2]); 10 printf(" 배열이름 aa의값 (= 주소 ) 는 %d \n", aa); 11 } --- 배열의각자리값과주소를출력한다. --- 배열이름 (aa 주소 ) 을출력한다.

2. 메모리와주소 배열의이름활용법 aa 값을 1031로가정하고, aa+1을계산한결과는무엇일까? 예상결과 : aa+1 1031 + 1 = 1032 (X) 실제결과 : aa+1 1031 + 4 = 1035 (O) 계산과정 +1 의의미 : 배열 aa의위치에서한칸건너뜀 한칸 : aa가정수형배열이므로 4byte 즉, aa+1 = &aa[1] = 1035

[ 응용 9-5] 정수형배열의메모리할당 2 01 #include <stdio.h> 02 03 int main( ) 04 { 05 int aa[3] = {10, 20, 30}; 06 07 printf("&aa[0] 는 %d, aa+0 은 %d \n", 1, aa+0); 08 printf("&aa[1] 는 %d, aa+1 은 %d \n", &aa[1], 2 ); 09 printf("&aa[2] 는 %d, aa+2 는 %d \n", &aa[2], 3 ); 10 } ---&aa[0]= =aa+0 ---&aa[1]= =aa+1 ---&aa[2]= =aa+2

3. 포인터 포인터의기본개념 포인터란주소를담는그릇 ( 변수 ) 포인터선언 : * 를붙여줌 포인터변수 p에는변수의주소가들어감

3. 포인터 ➊ char ch : 1byte를차지하므로, 주소 1031번지에 1byte 자리잡음 ➋ char* p : 1032~1035번지까지 4byte 자리잡음 ➌ ch = A : 변수 ch에 A 값넣기 ➍ p = &ch : &ch는 1031번지이므로포인터변수 p에는 1031이들감

[ 기본 9-6] 일반변수와포인터변수의관계 01 #include <stdio.h> 02 03 int main( ) 04 { 05 char ch; 06 char* p; 07 08 ch = 'A'; 09 p = &ch; 10 11 printf("ch 가가지고있는값 : ch = = > %c \n", ch); 12 printf("ch 의주소 (address): &ch = = > %d \n", &ch); 13 printf("p 가가지고있는값 : p = = > %d \n", p); 14 printf("p 가가리키는곳의실제값 : *p = = > %c \n", *p); 15 } --- 문자형변수와포인터변수를선언한다. --- 문자 'A' 를 ch 에대입하고 ch 의주소를 p 에대입한다.

3. 포인터 5행 ~6행 : 문자형변수 ch, 포인터변수 p를선언 8행 : ch에 A를대입 9행 : ch 주소를 p에대입 11행 : ch값인 A 출력 12행 : ch 주솟값인 9042587을출력 13행 : 변수 ch의주솟값을넣었으므로 12행과동일한 9042587을출력 14행 : *p 는 p에저장된주소 (9042587) 가가리키는곳의실제값 임. 따라서 9042587번지에들어있는 A 가출력

3. 포인터 ➊ 포인터변수를선언방법 : 변수형 * - 정수형 : int*, 문자형 : char*, 실수형 : float* ➋ char* p; 선언시 p에는문자형변수의주소값을넣어야함 int* p; 선언시 p에는정수형변수의주소값을넣어야함통일시키지않아도컴파일은가능, 논리적으로옳지않으므로주의필요

[ 응용 9-7] 포인터의관계이해하기 01 #include <stdio.h> 02 03 int main( ) 04 { 05 char ch; 06 char* p; 07 char* q; 08 09 ch = 1 ; 10 p = &ch ; 11 12 q = p; 13 14 2 = 'Z'; 15 16 printf("ch 가가지고있는값 : ch = = > %c \n\n", ch); 17 } --- 문자형변수 ch 를선언한다. --- 문자형포인터변수 p 와 q 를선언한다. ---ch 에문자를대입한다. ---ch 의주솟값을 p 에대입한다. ---p 의값을 q 에대입한다. ---q 가가리키는곳의실제값을변경한다.

3. 포인터 5행 ~7행 : 문자형변수 ch와문자형포인터변수 p와 q를선언 9행 : ch에 A 를대입 (➊) 10행 : ch의주솟값 (&ch, 1031번지 ) 을포인터변수 p에대입 (➋) 12행 : p의값을 q에대입 (➌)

3. 포인터 14 행 : q 가가리키는곳의실제값을 Z 로변경하라 는의미 q 가가리키는곳은 1031 번지의실제값이므로 A 가 Z 로변경 16 행 : ch 를출력하면 Z 가출력

4. 배열과포인터의관계 문자형배열과포인터 문자하나표현 : char 문자열표현 : s[12] I T - C o o K B o o k \0 char* p = s : 배열 s 와포인터 p 호환가능 s[3] == *(p+3)

[ 기본 9-8] 문자열배열과포인터의관계 1 01 #include <stdio.h> 02 03 int main( ) 04 { 05 char s[8]= "Basic-C"; 06 char *p; 07 08 p = s; 09 10 printf("&s[3] = = > %s\n", &s[3]); 11 printf("p+3 = = > %s\n\n", p+3); 12 13 printf("s[3] = = > %c\n", s[3]); 14 printf("*(p+3) = = > %c\n", *(p+3)); 15 } ---문자형배열을선언하고초깃값을대입한다. ---문자형포인터변수를선언한다. ---p에배열 s의주소를대입한다. ---문자열과포인터의주솟값을 %s로출력한다. ---문자와포인터의실제값을 %c로출력한다.

4. 배열과포인터의관계 5 행 : 문자열배열 s 선언, Basic-C 문자열로초기화 6 행 : 문자형포인터변수 p 선언 8 행 : p 에배열 s 의주소값 s 대입 10 행 : 배열 s 와포터 p 모두 1016 번지를가리킴 &s[3] : i 값을저장하고있는주소값 = 1019 번지 널값을만날때까지계속출력 ic-c 출력

4. 배열과포인터의관계 11행 : p+3-1016에서 3칸을건너뜀 1019번지 1019번지에 i 값이저장되어있으므로 ic-c 출력 13행 : s[3] 출력 i 출력 14행 : *(p+3) - p에서 3칸더간주소 (1019번지) 의실제값 i 출력

[ 응용 9-9] 문자열배열과포인터의관계 2 01 #include <stdio.h> 02 03 int main( ) 04 { 05 char s[8]= "Basic-C"; 06 char *p; 07 int i; 08 09 p = 1 ; 10 11 for( i=sizeof(s)-2 ; i>=0 ; i--) 12 printf("%c", *( 2 ) ); 13 14 printf("\n"); 15 } --- 포인터변수에배열주소를대입한다. --- 문자형배열의끝부터배열의개수만큼반복한다. ----- 포인터변수가가리키는곳의문자하나를출력한다.

4. 배열과포인터의관계 문자열배열과포인터의응용 5 행 : 문자열배열선언, Basic-C 로초기화 6 행 : 포인터변수 p 선언 9 행 : 배열 s 의이름을 p 에대입 11 행 : i 의초기값을 배열크기 -2 로대입 i 가 0 보다크거나같은동안반복 (6~0 까지 7 회반복 ) 12 행 : (p+i) 의실제값출력 *(p+i) (p+6) (p+5) (p+4) (p+3) (p+2) (p+1) (p+0)

4. 배열과포인터의관계 포인터학습노하우 ➊ 포인터변수가무엇을가리키는지확인한다. ➋ 포인터변수를선언할때는변수앞에 * 만붙이면된다. ➌ 포인터변수에는꼭주솟값을넣어야한다. - 변수이름앞에 & 를붙임 - 배열의이름은그자체가주소이므로 & 를붙이지않음

4. 배열과포인터의관계 ➍ 포인터가가리키는곳의실제값을구하려면 * 를붙인다. - 포인터변수 p 가변수 a 가들어있는주소인 1016 번지를가리킨다고가정함.

4. 배열과포인터의관계 - *p 에는임의의값을대입할수있지만, p 에는오직주소만들어간다는점에주의.

[ 예제모음 24] 포인터를이용해문자열을거꾸로출력

[ 예제모음 ] 포인터를이용해문자열을거꾸로출력 01 #include <stdio.h> 02 #include <string.h> 03 04 int main( ) 05 { 06 char ss[100]; 07 int count, i; 08 char *p; 09 10 printf(" 문자열을입력하세요 : "); 11 scanf_s("%s", ss, 100); 12 13 count = strlen(ss); 14 15 p = ss; 16 17 printf(" 내용을거꾸로출력 = = > "); 18 for(i=0 ; i<count ; i++) 19 { 20 printf("%c", *(p+count-(i+1)) ); 21 } --- 입력받을문자배열을선언한다. --- 문자형포인터를선언한다. --- 문자열을입력한다. --- 입력한문자열의개수다. --- 배열 ss 의주소를포인터변수 p 에대입한다. --- 포인터 p 에있는실제값을문자열의제일뒤부터출력한다.

[ 예제모음 ] 포인터를이용해문자열을거꾸로출력 22 printf("\n"); 23 }

[ 예제모음 25] 포인터를이용한두값의교환

[ 예제모음 ] 포인터를이용한두값의교환 01 #include <stdio.h> 02 03 int main( ) 04 { 05 int a, b, tmp; 06 int *p1, *p2; 07 08 printf("a 값입력 : "); 09 scanf_s("%d", &a); 10 printf("b 값입력 : "); 11 scanf_s("%d", &b); 12 13 p1 = &a; 14 p2 = &b; 15 16 tmp = *p1; 17 *p1 = *p2; 18 *p2 = tmp; 19 20 printf(" 바뀐값 a 는 %d, b 는 %d \n", a, b); 21 } ---정수형변수세개와포인터변수두개를선언한다. ---a와 b에값을입력한다. ---변수 a의주솟값을 p1에대입한다. ---변수 b의주솟값을 p2에대입한다. ---➊ p1이가리키는곳의실제값을 tmp에넣는다. ---➋ p2이가리키는곳의실제값을 p1이가리키는곳에넣음 ---➌ tmp에저장된값을 p2가가리키는곳에넣는다.

[ 예제모음 26] 포인터를이용한배열의정렬

[ 예제모음 26] 포인터를이용한배열의정렬 01 #include <stdio.h> 02 03 int main( ) 04 { 05 int s[10] = {1, 0, 3, 2, 5, 4, 7, 6, 9, 8}; 06 int tmp; 07 int i, k; 08 09 int *p; 10 11 p = s; 12 13 printf(" 정렬전배열 s = = > "); 14 for(i=0 ; i<10 ; i++) 15 { 16 printf("%d ", *(p+i)); 17 } 18 printf("\n"); 19 --- 배열 s 에정숫값 10 개를초기화하고관련변수를선언한다. --- 포인터변수를선언한다. --- 배열 s 의주소를포인터변수 p 에대입한다. --- 정렬전의상태로데이터 10 개를출력한다.

[ 예제모음 26] 포인터를이용한배열의정렬 20 for (i=0 ; i<9 ; i++) 21 { 22 for(k=i+1 ; k<10 ; k++) 23 { 24 if ( *(p+i) > *(p+k) ) 25 { 26 tmp = *(p+i); 27 *p(+i) = *(p+k); 28 *p(+k) = tmp; 29 } 30 } 31 } 32 printf(" 정렬후배열 s = = > "); 33 for(i=0 ; i<10 ; i++) 34 { 35 printf("%d ", *(p+i)); 36 } 37 printf("\n"); 38 } ---9 회반복한다. 내부 for 문으로비교할두값중첫번째값의자리는 s[0]~s[8] 이다. ---- 내부 for 문으로 9 회, 8 회, 7 회,, 1 회반복한다. 비교할두값중두번째값의자리는 s[1]~s[9] 다. -------p+i 의실제값이 p+k 의실제값보다크면두값을바꾼다. --- 정렬후의상태로데이터 10 개를출력한다.

[10 장요약 ] 1 스택 ➊ 한쪽끝이막혀있는데이터구조 ( 자료구조 ) 를말하며,L IFO(Last In First Out) 구조다. ➋ 스택을구현하려면 배열 이라는데이터구조를사용해야한다. 2 메모리와주소 ➊ 프로그램에서사용된변수, 배열등은모두메모리 ( 램 ) 에존재하며, 이메모리의각자리에는주소가할당되어있다. ➋ 변수의주소를표시하려면변수이름앞에 & 를붙인다. ➌ 배열의이름자체는배열의시작주소다. ➍ 정수형변수는 4바이트를, 문자형변수는 1바이트를차지한다. 3 포인터 ➊ 포인터변수란주소를저장하는변수로, 포인터변수를선언할때는 * 를붙여준다. ➋ 포인터변수에는반드시주소만대입시켜야한다. ➌ 포인터변수의크기는정수, 실수, 문자형에관계없이무조건4 바이트다. ➍ 가변적인문자열을저장할때는배열보다는포인터가더적당하다.