제 7장 배열과 포인터 Hello!! C 언어 강성호 김학배 최우영.

Slides:



Advertisements
Similar presentations
1.1 구조체란 1.2 중첩 구조체 1.3 구조체와 배열 1.4 구조체와 포인터 1.5 구조체와 함수 1.6 공용체와 열거형.
Advertisements

Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
1 구조체 윤 홍 란 컴퓨터 프로그래밍 2 구조체 정의  구조체란 ? o 서로 다른 형의 변수들을 하나로 묶어주는 mechanism. (cf. 배열 : 같은 형의 변수들을 하나로 묶어주는 mechanism) o 예 : 카드의.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
Part 11 문자열 ©우균, 창병모 ©우균, 창병모.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
8. 배열.
제 9 장 구조체와 공용체.
-Part2- 제3장 포인터란 무엇인가.
윤 홍 란 포인터 윤 홍 란
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
5장 배열 작성자 : 변재현.
Chapter 13 문자 데이터와 문자열 문자 데이터 문자열.
5장. 참조 타입.
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
C 프로그래밍.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
14장. 포인터와 함수에 대한 이해.
2019년 1월 16일 오후 6시 15분 제 6 장 함수
-Part3- 제2장 문자열 표준 함수와 기타 표준 함수
11장. 1차원 배열.
* 07/16/96 처음으로 배우는 C 프로그래밍 제1부 기초 제3장 치환, 주소, 대화식 입력 *
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 8 장 배열, 주소, 포인터.
C#.
C 2장. C 프로그램 시작하기 #include <stdio.h> int main(void) { int num;
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
구조체.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 7 장 배열.
5장 배열과 문자열 C 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
Fucntion 요약.
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
제 6 장 함수(functions).
7주차: Functions and Arrays
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
제 4 장 Record.
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
어서와 C언어는 처음이지 제21장.
윈도우에서의 유니코드.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

제 7장 배열과 포인터 Hello!! C 언어 강성호 김학배 최우영

순서 제 7장 배열과 포인터 배열 포인터 배열과 포인터의 관계 문자열 요약

배열 배열의 정의 배열 요소의 정의 배열의 이름은 첫 번째 요소의 저장 번지를 나타낸다. 제 7장 배열과 포인터 배열의 정의 동일한 이름과 동일한 테이터형을 가진 여러개의 변수들을 동시에 저장하는 영역 배열 요소의 정의 각각의 저장 영역 배열의 이름은 첫 번째 요소의 저장 번지를 나타낸다.

배열 일차원 배열 이차원 배열 첨자([]안의 숫자)가 하나인 배열 형식 <형식> 변수형 배열 이름 [배열요소개수]; 제 7장 배열과 포인터 일차원 배열 첨자([]안의 숫자)가 하나인 배열 형식 <형식> 변수형 배열 이름 [배열요소개수]; int array[10]; 이차원 배열 두 가지 종류의 첨자가 필요한 배열 <형식> 변수형 배열명[첫 번째 배열요소][두 번째 배열요소개수]; int array [3] [5];

배열의 초기화 배열의 초기화 형식 일차원 배열의 초기화 제 7장 배열과 포인터 배열의 초기화 형식 <형식> 변수형 배열명[배열요소개수]={ x1,…,x10} (초기화값); 개수가 같아야 함 일차원 배열의 초기화 숫자형 배열의 초기화 쉼표(,)로 구분한다. 중괄호({})로 묶어 준다. 예 : int array[10]={1,2,3,4,5,6,7,8,9,10}; 문자열 배열의 초기화 큰따옴표(" ")로 묶어 준다. 예 : char array[7]="Turbo-C";

배열의 초기화 이차원 배열의 초기화 함수 인자로서의 배열 숫자 배열의 초기화 제 7장 배열과 포인터 이차원 배열의 초기화 숫자 배열의 초기화 int array[2][3]={{1,2},{3,4},{5,6}}; 문자열 배열의 초기화 int array[3][10]={"Turbo-C","is","easy!"}; 함수 인자로서의 배열 함수의 인자로서 배열의 이름을 사용 함수에 배열의 첫 번째 주소값이 전달

배열의 초기화 [예제 7-1] #include <stdio.h> #define MAX 10 제 7장 배열과 포인터 [예제 7-1] #include <stdio.h> #define MAX 10 int prn(int x[MAX]); main(){ int num[MAX] = {1,2,3,4,5,6,7,8,9,10}; prn(&num[0]); /*첫 번째 배열 요소의 주소를 prn함수에 전해줌 */ } int prn(int x[MAX]){ int i; printf("The address of array name is %d \n", x); for ( i = 0 ; i < MAX ; i++ ){ printf("ADDRESS : %d\t", &x[i]); printf("VALUE : %d\n", x[i]); } 계속

배열의 초기화 [예제 7-1] 계속 [실행결과] The address of array name is 404 제 7장 배열과 포인터 [예제 7-1] 계속 [실행결과] The address of array name is 404 ADDRESS : 4076 VALUE : 1 ADDRESS : 4078 VALUE : 2 ADDRESS : 4080 VALUE : 3 : : ADDRESS : 4094 VALUE : 10

포인터 포인터의 선언 및 간접 연산자 포인터의 개념 모든 변수는 각각의 주소값을 갖는다. 제 7장 배열과 포인터 포인터의 선언 및 간접 연산자 포인터의 개념 모든 변수는 각각의 주소값을 갖는다. 변수 pnt에 다른 변수 a의 주소를 저장했을 때, pnt를 a에 대한 포인터라 한다. 포인터의 선언 변수형 *변수명;

포인터 [예제 7-2] #include<stdio.h> main() { int a = 50; int *pnt; 제 7장 배열과 포인터 [예제 7-2] #include<stdio.h> main() { int a = 50; int *pnt; printf("a=%d pnt=%d\n ",a,pnt); } [실행결과] a=50 pnt=1824

포인터 [예제 7-3] #include<stdio.h> main() { 제 7장 배열과 포인터 [예제 7-3] #include<stdio.h> main() { int a = 50; /* 먼저 변수를 초기화한 후 */ int *pnt; /* 포인터를 선언 */ pnt = &a; /* 참조된 변수의 주소값으로 초기화 */ printf("a=%d pnt=%d \n",a,pnt); } [실행결과] a=50 pnt=4094

포인터 포인터 연산 포인터의 주소 계산법 예 : int_pnt2=int_pnt1+1; 제 7장 배열과 포인터 포인터 연산 예 : int_pnt2=int_pnt1+1; int_pnt1이 의미하는 주소값을 한 단위 (int==> 2byte)증가시켜 바로 다음 위치의 주소값을 int_pnt2에 저장 포인터의 주소 계산법 포인터 변수의 `형'에 따라 다름 int_pnt++ ==> 2byte씩 증가 float_pnt++ ==> 4byte씩 증가

포인터 [예제 7-4] #include <stdio.h> #define MAX 10 제 7장 배열과 포인터 [예제 7-4] #include <stdio.h> #define MAX 10 int i_array[MAX] = {1, 2, 3, 4, 5, 6, 7, 8, 9,10}; /* 배열선언 및 초기화*/ int I; int *i_pnt; /* 포인터 선언 */ float f_array[MAX] = {0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}; /* 배열선언 및 초기화*/ float *f_pnt; /* 포인터 선언*/ main(){ i_pnt = i_array; /* 포인터 초기화 */ f_pnt = f_array; /* 포인터 초기화 */ [실행결과] for ( i=0 ; i<MAX ; i++) 1 0.100000 printf("%d\t%f\n",*i_pnt++,*f_pnt++); 2 0.200000 } 3 0.300000 : : 10 1.000000

배열과 포인터의 관계 포인터명과 배열명은 메모리의 주소 포인터 연산자(*)와 배열 연산자([])의 의미 포인터 배열 제 7장 배열과 포인터 포인터명과 배열명은 메모리의 주소 포인터 연산자(*)와 배열 연산자([])의 의미 *(pnt+i) : 주소 pnt 이후의 i번째 데이터를 구한다. array[i] : 주소 array 이후의 I번째 데이터를 구한다. 포인터 배열 길이가 가변적인 문자열 데이터를 배열로 처리할 때 함수 호출시 다수의 포인터를 인도할 때 포인터 배열과 메모리 예 : char *pnt[3]={`KIM',`LEE',`PARK'}; 포인터 배열 pnt 의 영역에 각 문자열의 시작주소가 수록 이차원 배열과 메모리 각 배열 요소에 대한 메모리 영역이 모두 확보 포인터와 메모리 할당 malloc(), calloc() 함수 이용

배열과 포인터의 관계 [예제 7-5] #include<stdio.h> main(){ 제 7장 배열과 포인터 [예제 7-5] #include<stdio.h> main(){ int a[5]={1,2,3,4}; int *pnt; pnt = a; printf("%d %d %d %d \n",*pnt,*(pnt+1),*(pnt+2),*(pnt+3)); printf("%d %d %d %d \n",a[0],a[1],a[2],a[3]) ; } [실행결과] 1 2 3 4 1 2 3 4 /* 두 실행 결과는 같음 */

배열과 포인터의 관계 [예제 7-6] #include<stdio.h> main(){ int a[2][2] = { 제 7장 배열과 포인터 [예제 7-6] #include<stdio.h> main(){ int a[2][2] = { 1,2, 3,4 }; int *pnt; pnt=a[0]; printf("%d %d\n%d %d\n",*pnt,*(pnt+1),*(pnt+1*2),*(pnt+1*2+1)); printf("%d %d\n%d %d\n",a[0][0],a[0][1],a[1][0],a[1][1]); } [실행결과] 1 2 3 4 1 2 /* 두 실행결과는 같음 */

배열과 포인터의 관계 [예제 7-7] #include<stdio.h> main() { 제 7장 배열과 포인터 [예제 7-7] #include<stdio.h> main() { int a[4] = {1, 2, 3, 4}; int *pnt; pnt=a; printf("%d %d %d %d \n",pnt[0],pnt[1],pnt[2],pnt[3]); } [실행결과] 1 2 3 4

배열과 포인터의 관계 main 함수의 인자 포인터의 포인터 void 포인터 함수 포인터 두 가지의 적합한 형태 제 7장 배열과 포인터 main 함수의 인자 두 가지의 적합한 형태 int main() int main( argc, argv ) int argc; char **argv; 포인터의 포인터 포인터 변수를 가리키는 포인터 char **string_array={"Dog","Cat","Lion","Tiger"}; void 포인터 포인터의 데이터형이 정해지지 않은 포인터 데이터형에 관계없이 동작하는 함수를 제작하는데 유용 함수 포인터 코드를 가리키는 포인터

포인터 배열 포인터를 배열로 만든 것 선언 변수형 *변수명[배열요소개수]; 예) int *pnt+array [20]; 제 7장 배열과 포인터 포인터를 배열로 만든 것 선언 변수형 *변수명[배열요소개수]; 예) int *pnt+array [20]; 선언과 동시에 초기화 변수형 *변수명[배열요소개수] = {인자1, 인자2, … 인자n} ; 예) char *pnt[3] = {“pointer",“string",“pointerarray"};

배열과 포인터의 관계 [예제 7-8] #include<stdio.h> void main() { 제 7장 배열과 포인터 [예제 7-8] #include<stdio.h> void main() { char *pnt[] = {"Chan","Ho","Park"}; /* 포인터 배열 선언 */ char array[3][5]= {"Chan","Ho","Park"}; /* 이차원 배열 선언 */ int j; printf("memory address of pointer array pnt\n"); printf("pnt => %p\n",pnt); for(j=0;j<3;j++) printf("pnt[%d] (address %p) => %s\n",j,pnt[j],pnt[j]); printf("\nmemory address of two-dimensional array\n"); printf("array => %p\n",array); printf("array[%d] (address %p) => %s\n",j,array[j], array[j]); } 계속

배열과 포인터의 관계 [예제 7-8] 계속 [실행결과] memory address of pointer array pnt 제 7장 배열과 포인터 [예제 7-8] 계속 [실행결과] memory address of pointer array pnt pnt => 1747:0FF4 pnt[0] (address 16FB:00AF) => Chan pnt[1] (address 16FB:00B4) => Ho pnt[2] (address 16FB:00B7) => Park memory address of two-dimensional array array => 1747:0FE4 array[0] (address 1747:0FE4) => Chan array[1] (address 1747:0FE9) => Ho array[2] (address 1747:0FEE) => Park

배열과 포인터의 관계 포인터의 포인터 포인터 변수를 가리키는 포인터 제 7장 배열과 포인터 포인터의 포인터 포인터 변수를 가리키는 포인터 char **string_array={"Dog","Cat","Lion","Tiger"}; 다중간접참조(indirection)

배열과 포인터의 관계 [예제 7-9] #include<stdio.h> main() { int x; 제 7장 배열과 포인터 [예제 7-9] #include<stdio.h> main() { int x; int *pnt=&x; /* pnt는 x에 대한 포인터 */ int **p_pnt=&pnt; /* p_pnt는 pnt에 대한 포인터 */ **p_pnt=100; /* 변수 x에 100을 할당 */ printf("x=%d\n",x); } [실행결과] x=100

배열과 포인터의 관계 void 포인터 함수 포인터 포인터의 데이터형이 정해지지 않은 포인터 제 7장 배열과 포인터 void 포인터 포인터의 데이터형이 정해지지 않은 포인터 데이터형에 관계없이 동작하는 함수를 제작하는데 유용 함수 포인터 코드를 가리키는 포인터

문자열 문자열의 개념 문자 상수 ASCII 코드화 char형 선언 문자열 상수 char형 배열로 선언 문자열 배열과 초기화 제 7장 배열과 포인터 문자열의 개념 문자 상수 ASCII 코드화 char형 선언 문자열 상수 char형 배열로 선언 문자열 배열과 초기화 문자 개수보다 하나 더 많은 배열 요소를 선택 char array[6]="Seoul";

문자열 [예제 7-10] /* 문자 상수 사용의 예*/ #include <stdio.h> main() { 제 7장 배열과 포인터 [예제 7-10] /* 문자 상수 사용의 예*/ #include <stdio.h> main() { char ch = 'a'; char num = '2'; printf("ch=%c, num=%c\n",ch,num); } [실행결과] ch=a, num=2

문자열과 포인터의 관계 포인터와 문자열 배열명은 첫 번째 요소에 대한 포인터 char *pnt="hello"; 제 7장 배열과 포인터 포인터와 문자열 배열명은 첫 번째 요소에 대한 포인터 char *pnt="hello"; pnt에는 첫문자인 `h'의 저장 번지가 들어있다. char pnt[]="hello"; ==> 배열명이 첫 문자인 `h의저장번지를 가리키는 포인터가 된다.

문자열의 입출력 문자열 입출력 함수 gets(), scanf() stdio.h 헤더화일 포함 gets() 함수의 형식 제 7장 배열과 포인터 문자열 입출력 함수 gets(), scanf() stdio.h 헤더화일 포함 gets() 함수의 형식 scanf() 함수의 형식

문자열의 입출력 [예제 7-11] #include <stdio.h> main() { char array[20]; 제 7장 배열과 포인터 [예제 7-11] #include <stdio.h> main() { char array[20]; printf("Enter a string : "); gets(array); printf("The received string : %s\n", array); } [실행결과] Enter a string : I love you. The received string : I love you.

문자열의 입출력 [예제 7-12] #include <stdio.h> main() { char season[10]; 제 7장 배열과 포인터 [예제 7-12] #include <stdio.h> main() { char season[10]; char month[10]; printf("Enter season and month\n"); scanf("%s%s", season , month); printf("season = %s , month = %s", season , month); } [실행결과] Enter season and month spring May season = spring , month = May

문자열의 입출력 문자열 입출력 함수 puts(), prinf() stdio.h 헤더파일 포함 puts()함수의 형식 제 7장 배열과 포인터 문자열 입출력 함수 puts(), prinf() stdio.h 헤더파일 포함 puts()함수의 형식 printf()함수의 형식

문자열의 입출력 [예제 7-13] /* Example using puts() library function */ 제 7장 배열과 포인터 [예제 7-13] /* Example using puts() library function */ #include <stdio.h> main(){ char *a="How"; char *b="old"; char string1[]="are"; char string2[]="you!"; puts(a); puts(b); puts(string1); puts(string2); [실행결과] } How old are you!

문자열의 입출력 [예제 7-14] /* Example using printf() library function */ 제 7장 배열과 포인터 [예제 7-14] /* Example using printf() library function */ #include <stdio.h> main(){ char f_name[30] = "Michael"; char l_name[30] = "Jordan"; printf("What`s your name?\n"); printf("f_name : %s\n", f_name); printf("l_name : %s\n", l_name); } [실행결과] What`s your name? f_name : Michael l_name : Jordan

문자열의 처리 문자열 라이브러리 함수 string.h 헤더파일 포함 문자열의 길이, strlen() 제 7장 배열과 포인터 문자열 라이브러리 함수 string.h 헤더파일 포함 문자열의 길이, strlen() 문자열의 복사, strcpy() 문자열의 결합, strcat()

문자열의 처리 제 7장 배열과 포인터 [예제 7-15] /* Program for an example of string library functions */ #include <stdio.h> #include <string.h> main(){ char string[30]; int a; printf("Enter a string : "); gets(string); a=strlen(string); printf("The length of string is %d.",a); } [실행결과] Enter a string : abcdefg The length of string is 7.

문자열의 처리 [예제 7-16] /* Example using strcpy() function */ 제 7장 배열과 포인터 [예제 7-16] /* Example using strcpy() function */ #include <stdio.h> #include <string.h> main(){ char str1[80],str2[80],*str3; printf("Enter string1 : "); gets(str1); printf("Enter string2 : "); gets(str2); str3=strcpy(str1,str2); printf("%s is copied in str1\n",str3); } [실행결과] Enter string1 : Korea Enter string2 : aeroK aeroK is copied in str1

문자열의 처리 [예제 7-17] /* Example using strcat() library function */ 제 7장 배열과 포인터 [예제 7-17] /* Example using strcat() library function */ #include <stdio.h> #include <string.h> main(){ char dest[80]; char sour[80]; gets(dest); printf("This string, [%s] is in dest.\n" , dest); gets(sour); strcat(dest, sour); printf("This string, [%s] is in sour.\n" , sour); printf("This string, [%s] is in dest." , dest); } 계속

문자열의 처리 [예제 7-17] 계속 [실행결과] Hi, This string, [Hi, ] is in dest. 제 7장 배열과 포인터 [예제 7-17] 계속 [실행결과] Hi, This string, [Hi, ] is in dest. everyone. This string, [everyone.] is in sour. This string, [Hi, everyone.] is in dest.

문자열의 처리 문자열 라이브러리 함수 문자열의 검색, strchr() 문자열 변환, strlwr()와 strupr() 제 7장 배열과 포인터 문자열 라이브러리 함수 문자열의 검색, strchr() 문자열 변환, strlwr()와 strupr()

문자열의 처리 [예제 7-18] /* Example using srtchr() library function */ 제 7장 배열과 포인터 [예제 7-18] /* Example using srtchr() library function */ #include <stdio.h> #include <string.h> void main(void){ char a[80],*d; int c; printf("Enter a string : "); gets(a); printf("The character to be searched : "); c=getchar(); d=strchr(a,c); printf("The character you are searching,"); printf("'%c'is discovered %d position in a.",c,d-a+1); } 계속

문자열의 처리 [예제 7-18] 계속 [실행결과] Enter a string : beautiful 제 7장 배열과 포인터 [예제 7-18] 계속 [실행결과] Enter a string : beautiful The character to be searched : l The character you are searching,'l'is discovered 9 position in a.

문자열의 처리 [예제 7-19] /* Example using strlwr() and strupr() */ 제 7장 배열과 포인터 [예제 7-19] /* Example using strlwr() and strupr() */ #include <stdio.h> #include <ctype.h> main(){ char a,b,c; char ch; printf("Enter alphabet : "); scanf("%c", &ch); b = tolower( ch ); printf("Convert into lower case letter : %c\n",b); c = toupper( ch ); printf("Convert into upper case letter : %c\n",c); } [실행결과] Enter alphabet : a Convert into lower case letter : a Convert into upper case letter : A