Chapter 11. 배열과 포인터.

Slides:



Advertisements
Similar presentations
제6장 조건문.
Advertisements

프로그래밍1 및 실습 (C언어) - 3장 기본자료형 (3.6부터 끝까지) -
데이터의 표현과 연산 (1) (Chapter 3)
슬라이드 1~21까지는 각자 복습! 슬라이드 22부터는 수업시간에 복습
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
C 프로그래밍.
C 6장. 함수 #include <stdio.h> int main(void) { int num;
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express Slide 1 (of 26)
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
제5장 제어명령
C언어: 배열 (Arrays).
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
6장. printf와 scanf 함수에 대한 고찰
누구나 즐기는 C언어 콘서트 제4장 수식과 연산자.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.
7. while 문의 흐름 제어.
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
컴퓨터 프로그래밍 기초 - 2nd : scanf(), printf() 와 연산자 -
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
7장 배열 배열의 정의 배열의 초기화 1차원 배열 2차원 및 다차원 배열 문자 배열 배열과 구조.
Chapter 06. 선택문.
Chapter 10. 포인터.
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express.
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
13. 포인터와 배열! 함께 이해하기.
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
Chapter 10 함수 기본.
C언어 프로그래밍의 이해 Ch13. 선행처리기와 주석문.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 11. 1차원 배열.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
제어문 & 반복문 C스터디 2주차.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 09. C언어의 핵심! 함수!
CHAP 2:순환.
제 1 강.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
컴퓨터 프로그램 제2,3장 간단한 C 프로그램 김 문 기.
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
Chapter 04. 데이터의 표현과 연산(Ⅱ).
Chapter 05. 입출력 함수.
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
#1 배열 활용 #include int main(void) { int i; int grade[5]; grade[0] = 10; grade[1] = 20; grade[2] = 30; grade[3] = 40; grade[4] = 50; for(i=0;i.
-Part2- 제1장 1차원 배열이란 무엇인가.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
누구나 즐기는 C언어 콘서트 제2장 기초 사항 IT응용시스템공학과 김형진 교수.
-Part1- 제7장 반복문이란 무엇인가.
18장. 다차원 배열 그리고 포인터.
-Part1- 제8장 조건문이란 무엇인가 (교재 199페이지 ~ 224페이지)
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express Slide 1 (of 25)
뇌를 자극하는 C 프로그래밍.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
컴퓨터 프로그램은 여러 기능의 복합체이다. 라이브러리 함수와 사용자 정의 함수
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
-Part2- 제2장 다차원 배열이란 무엇인가.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
어서와 C언어는 처음이지 제16장.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
C.
Chapter 09. 배열.
어서와 C언어는 처음이지 제22장.
3b장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
Presentation transcript:

chapter 11. 배열과 포인터

배열의 모든 값을 출력하는 함수를 만들 때 배열요소의 값을 일일이 전달인자로 주는 것은 한계가 있다. 포인터로 배열 다루기 배열의 모든 값을 출력하는 함수를 만들 때 배열요소의 값을 일일이 전달인자로 주는 것은 한계가 있다. int ary[5] = {10, 20, 30, 40, 50}; 배열의 선언 ary_prn(ary[0], ary[1], ary[2], ary[3], ary[4]); 함수의 호출 모든 배열요소를 일일이 전달인자로 줘야 한다. void ary_prn(int a, int b, int c, int d, int e) { printf(“%d, %d, %d, %d, %d\n”, a, b, c, d, e); } 함수의 정의 매개변수도 배열요소의 개수만큼 있어야 한다! 포인터를 사용하면 배열요소의 값을 간단히 처리할 수 있다.

▶ 포인터로 배열요소를 참조하자. 배열은 첫번째 배열요소의 포인터만 알면 나머지 배열요소의 포인터도 쉽게 알 수 있다. 포인터에 정수값을 더할 때는 포인터가 가리키는 자료형의 크기를 곱해서 더해준다. 예를 들어 4를 더하면 마지막 배열요소의 포인터가 구해진다. X의 값이 36번지라고 할 때

▶ 포인터로 배열요소를 참조하자. 모든 배열요소의 포인터는 첫번째 배열요소의 포인터에 정수값을 차례로 더하면 구해진다. int ary[5] = {10, 20, 30, 40, 50}; 첫번째 배열요소의 포인터 값이 36번지 일 때 각 배열요소의 포인터에 참조연산자를 사용하면 모든 값을 참조할 수 있다. for(i=0; i<5; i++){ printf(“%d\n”, *(&ary[0]+i)); }

배열명은 첫 번째 배열요소를 가리키는 포인터를 기호화한 것이다. ▶ 배열명은 포인터이다! 배열명은 첫 번째 배열요소를 가리키는 포인터를 기호화한 것이다. 따라서 배열명으로 주소값을 계산하여 모든 배열요소를 참조할 수 있으며 의미상 이해하기 쉽게 배열표현을 주로 사용하는 것이다. for(i=0; i<5; i++){ printf(“%d\n”, *(ary+i)); }

배열명을 포인터변수에 저장하면 포인터변수도 배열명처럼 사용할 수 있다. 이 때 포인터변수는 첫번째 배열요소를 가리킨다. ▶ 포인터변수로 배열요소를 참조하자. 배열명을 포인터변수에 저장하면 포인터변수도 배열명처럼 사용할 수 있다. 이 때 포인터변수는 첫번째 배열요소를 가리킨다. int ary[5]={10,20,30,40,50}; int *ap=ary; int i; for(i=0; i<5; i++){ printf(“%5d”, *(ap+i)); // ap[i]도 가능 }

포인터(변수)로 배열요소를 참조하는 방법은 다음과 같다. ▶ 포인터를 사용한 배열요소의 참조 정리 포인터(변수)로 배열요소를 참조하는 방법은 다음과 같다. ① 배열명을 사용한 배열표현 ② 배열명을 사용한 포인터표현 ③ 배열명을 저장한 포인터변수를 사용한 포인터표현 ④ 배열명을 저장한 포인터변수를 사용한 배열표현 int ary[5] = {10, 20, 30, 40, 50}; int *ap=ary;

배열명은 포인터상수이므로 자신의 값을 바꿀 수 없다. ▶ 배열명은 포인터변수가 아니다. 배열명은 포인터상수이므로 자신의 값을 바꿀 수 없다. int ary[5] = {10, 20, 30, 40, 50}; 포인터변수는 기억공간이므로 자신의 값을 바꿀 수 있다. int ary[5]={10,20,30,40,50}; int *ap=ary; int i; for(i=0; i<5; i++){ printf(“%5d”, *ap); ap++; }

배열을 처리하는 함수 배열의 모든 요소는 포인터로 참조할 수 있으므로 배열을 처리하는 함수에는 그 시작위치인 배열명을 전달인자로 준다. 배열의 값을 출력하는 함수 배열에 값을 입력하는 함수 배열의 평균을 구하는 함수

배열명을 전달인자로 받으므로 매개변수는 포인터변수를 선언한다. ▶ 배열의 값을 출력하는 함수 배열명을 전달인자로 받으므로 매개변수는 포인터변수를 선언한다. #include <stdio.h> void ary_prn(int *); int main() { int ary[5]={10,20,30,40,50}; ary_prn(ary); return 0; } void ary_prn(int *ap) int i; for(i=0; i<5; i++){ printf(“%5d”, ap[i]); // 함수의 선언 // 배열의 선언과 초기화 // 배열명을 전달인자로 주고 호출한다. // 배열명을 저장할 포인터변수 선언 // 포인터변수를 마치 배열명처럼 사용한다.

▶ 배열의 값을 출력하는 함수 포인터변수는 배열명이 아니므로 sizeof연산시 포인터변수의 크기만 계산된다. 따라서 포인터변수로 배열요소의 개수를 구할 수 없다. for(i=0; i<sizeof(ap)/sizeof(ap[0]); i++){ printf(“%5d”, ap[i]); } // sizeof(ap)는 포인터변수의 크기만 계산 배열의 크기가 바뀌어도 출력할 수 있는 함수를 만들 때는 배열요소의 개수를 전달인자로 받아야 한다. void ary_prn(int *ap, int an) { int i; for(i=0; i<an; i++){ printf(“%5d”, ap[i]); } // 배열요소의 개수를 받을 매개변수를 추가한다. // 배열요소의 개수만큼 반복한다.

▶ 배열에 값을 입력하는 함수 배열에 값을 입력할 때는 scanf함수에 각 배열요소의 포인터만을 전달인자로 준다(즉, 참조연산자를 사용하지 않는다). void ary_input(int *ap) { int i; for(i=0; i<5; i++){ scanf(“%d”, ap+i); } // 배열명을 저장할 포인터변수 선언 // 배열요소의 개수만큼 반복한다. // 각 배열요소의 포인터를 구해서 전달인자로 준다.

모든 배열요소의 평균을 구해서 리턴하는 함수를 만들자. ▶ 배열의 평균을 구하는 함수 모든 배열요소의 평균을 구해서 리턴하는 함수를 만들자. #include <stdio.h> double ary_avg(int *); int main() { int ary[5]={75,80,92,88,98}; double res; res=ary_avg(ary); printf(“배열의 평균은 : %.2lf\n”, res); return 0; } double ary_avg(int *ap) int i, tot=0; double average; for(i=0; i<5; i++) tot+=ap[i]; average=tot/5.0; return average; // 함수의 선언 // 리턴값을 저장할 변수 // 전달인자는 배열명, 리턴값은 res에 저장한다. // 매개변수는 포인터변수 // 제어변수와 합을 저장할 변수 // 평균을 저장할 변수 // 배열요소의 개수만큼 반복하면서 tot에 누적한다. // 평균 계산 // 계산된 평균값 리턴