C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.

Slides:



Advertisements
Similar presentations
Chapter 02. C언어 기반의 C++ 박 종 혁 교수 UCS Lab SeoulTech Tel:
Advertisements

2007 1학기 12 배열.
제 3 장 변수와 자료형.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
제 8 장  파서 생성기 YACC 사용하기.
C 프로그래밍.
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2011
C# 05장. 메소드와 인자.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Department of Computer Engineering
C 10장. 함수의 활용 #include <stdio.h> int main(void) { int num;
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
C언어: 배열 (Arrays).
처음으로 배우는 C 프로그래밍 제2부 기초 제5장 반복문.
쉽게 풀어쓴 C언어 Express 제9장 함수와 변수 C Express.
Part 08 함수 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다..
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.
8장 포인터.
10장 메모리 관리.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
Department of Computer Engineering
25장. 메모리 관리와 동적 할당.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
3장. 포인터, 배열, 구조체 포인터, 배열, 구조체 학습목표 기본적 데이터 타입
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
14장. 함수 1 01_ 함수의 기본 02_ 인자의 전달.
10장 포인터와 문자열 포인터 기본 배열과 포인터 매개변수 전달방법 포인터와 문자열.
표준 출력 함수 printf 출력 데이터 서식화(formatting) 표준 입력 함수 scanf 입력 데이터 서식화
12장 파일처리와 매크로 파일 입출력 함수 문자 입출력 함수 라인 입출력 함수 불록 입출력 함수 매크로.
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express.
프로그래밍2 및 실습 C언어 기반의 C++ 2.
Chapter 13 변수 범위.
제 3 장 상수와 변수
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
5장 이름, 바인딩, 영역(2) 순천향대학교 컴퓨터공학과 하상호.
13. 포인터와 배열! 함께 이해하기.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 11. 1차원 배열.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 09. C언어의 핵심! 함수!
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
Part 09 배열 안산1대학 디지털정보통신과 임 성 국.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 22. 구조체와 사용자 정의 자료형1.
포인터.
-Part2- 제1장 1차원 배열이란 무엇인가.
Department of Computer Engineering
18장. 다차원 배열 그리고 포인터.
C언어 (8) 정명희.
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
Chapter 08 조건문.
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
어서와 C언어는 처음이지 제16장.
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
17장. 포인터의 포인터.
printf("Global Korea\n");
C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력
Chapter 09. 배열.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 17. 포인터의 포인터.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
배열, 포인터, 함수 Review & 과제 1, 2.
배열.
11장. 1차원 배열.
Presentation transcript:

C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형

배열 동일한 자료유형의 여러 변수를 일괄 선언 연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조 동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조 배열의 선언에는 자료유형, 변수이름, 그리고 배열의 크기가 필요

배열의 크기와 첨자 첨자 배열 원소는 첨자(index)를 사용하여 참조 배열의 첫 원소는 항상 첨자가 0이며, 차례로 1씩 증가 배열 첨자는 유효한 값의 범위를 벗어나는 경우 문제가 발생하므로 항상 배열 첨자의 사용에 주의: 첨자 범위 : 0 ~ size-1

배열의 초기화 배열의 초기화에서 배열 의 크기 생략 가능

C-문자열 처리와 저장 C-문자열은 널(null) 문자(\0)가 문자 배열의 마지막에 저장 문자열은 일련의 문자를 앞 뒤로 인용부호로 둘러싸서 표기 항상 널 문자가 문자열의 마지막에 있어야 함. 만일 \0 문자가 없으면 그냥 문자배열(character array)로 취급. 따라서 문자열을 저장하는 배열의 크기는 저장되는 문자의 개수 보다 1이 커야 함

문자열 출력 문자열이 저장된 배열 이름을 이용하여 printf()문을 이용 배열 이름이 문자열 자체를 나타낸다고 생각 문자열을 출력하는 또 다른 방법은 다음과 같이 문자열을 구성하는 각각의 문자를 출력하는 방법 출력의 제한을 널(\0) 문자로 검사하면 편리 char str[] = “C Language!”; printf(“%s”, str);

함수의 인자로서의 배열 함수 호출(call) 문장 함수 sum()은 지역변수 total에 모든 원소의 합을 구하여 반환 첫 번째 인자는 배열 이름인 grade, 두 번째 인자는 이 배열의 크기인 7 int sum(int arr[], int n) { int i = 0, total = 0; for (i = 0; i < n; i++) total += arr[i]; return total; } printf("함수에서 구한 합은 %d이다. \n", sum(grade, 7));

지역변수와 전역 변수 변수의 유효 범위에 따른 구분 프로그램에서 사용되는 변수의 유효한 사용범위를 변수의 범위(scope)라고 함 지역 (local) 변수는 함수 또는 하나의 블록에서 선언되고 사용되는 변수 함수 외부에서 선언되는 함수를 전역 (global) 변수

키워드 extern 키워드 extern이 반드시 필요한 경우는 언제인가? 전역 변수 gCount가 선언된 위치가 이 변수를 사용하려는 블록이나 함수의 위치보다 나중에 위치하면, 블록이나 함수 내부에서 이 변수를 사용하기 위해서는 반드시 키워드 extern을 이용하여 외부 변수임을 알려야 함 파일 자체가 다른 경우에도 다른 파일에서 선언된 전역 변수를 이용하기 위해서는 extern에 의한 외부 변수임을 선언해야 함

정적 변수 변수의 선언에서 자료 유형 앞에 키워드 static을 넣어 정적 변수를 선언 정적 변수는 지역변수와 전역변수 모두에 이용 가능 정적 변수는 정적 지역변수와 정적 전역변수로 나눌 수 있음

메모리 주소 Address(주소) 메모리에는 저장장소의 위치를 나타내는 주소 값이 있음

주소 연산자 &변수 변수의 주소 값을 알아내려면 그 변수 앞에 주소 연산자 & (ampersand)를 이용 주소 값 이용의 장단점 주소 값을 이용하면 보다 편리하고 융통성 있는 프로그램이 가능 그러나 포인터를 사용한 프로그램 제작은 어려움

포인터 변수 포인터 변수는 일반 변수와는 다르게 변수에 저장되는 값이 메모리의 주소(address) 값만을 저장할 수 있는 특별한 변수

포인터 변수 선언 포인터 변수의 선언 여러 개의 포인터 변수를 한 번에 선언 포인터 변수는 그 포인터가 가리키는 변수의 자료유형에 따라 다름 일반 변수가 아니고 포인터 변수라는 사실을 나타내는 기호 * 별표 *의 위치가 변수 자료형 int와 변수명 사이 어디에 위치하든 관계 없음 여러 개의 포인터 변수를 한 번에 선언 int* ptr1, ptr2, ptr3; int *ptr1, *ptr2, *ptr3;

역참조 연산자 역참조(dereference) 연산자 * 구문 *ptr = i + 2;을 이용 포인터 변수 앞에 역참조 연산자 *를 붙이면 그 포인터가 가리키는 변수를 지칭 (포인터들 사이의 곱하기는 없음) 구문 *ptr = i + 2;을 이용 변수 i의 값이 2 증가

NULL 포인터 포인터 변수에 저장하는 NULL 포인터 변수를 선언할 때 다음과 같은 문장을 자주 이용한다. 포인터 변수가 다른 변수를 가리키는 지를 검사하는데 이용 int *ptr = NULL #define NULL ((void *)0) if (ptr == NULL) { … }

배열과 포인터 포인터를 이용하여 배열의 각 원소를 참조하는 방법 그렇다면 point는 무엇으로 이용할 수 있을까? 다음과 같은 배열 선언에서 변수 point[]는 int 형 원소 6개를 저장할 수 있는 배열을 의미 그렇다면 point는 무엇으로 이용할 수 있을까? 위에서 point는 배열의 첫 원소인 point[0]의 주소 point는 주소 상수로 배열의 첫 번째 원소의 주소 값 주소 상수 point에 역참조 연산자 *를 이용하면 바로 변수 point[0]를 지칭하므로 다음이 성립 int point[] = {95, 88, 76, 54, 85, 82}; point == &point[0] *point == point[0]

배열 이름을 이용한 원소 참조 배열이름을 이용한 point + 1(주소상수 + 1)은 무엇일까? 즉 point + 1은 &point[1]을 의미 배열 이름인 point와 역참조 연산자 *를 이용한 식 *point == point[0] *(point + 1) == point[1] *(point + 2) == point[2] *(point + i) == point[i]

함수의 인자로 포인터 이용 포인터 인자 함수의 형식 인자에서 int arr[] 와 int *arr 는 같은 의미 아래의 for문에서 다음 두 개의 코드는 같은 의미 sum += arr[i] sum += *(arr + i) int sumArray(int *arr, int SIZE) { int sum = 0, i = 0; for (i = 0; i < SIZE; i++) sum += *(arr + i); return sum; }

값에 의한 호출 call by value 함수의 형식 인자가 기본 자료형일 때 실제 함수가 호출되는 경우, 실인자의 값을 형식인자에 할당된 새로운 변수에 복사 저장 호출 전에는 변수 number에 10이 저장되었고, 변수 number를 실인자로 함수 increment(number)를 호출 함수 호출 후 변수 number의 값은 변했을까?

주소에 의한 전달의 이해 call by address

구조체 struct 구조체 정의 서로 다른 자료형들을 묶어서 만든 새로운 자료형 중괄호 사이에 원하는 여러 개의 변수를 선언 중괄호 다음 마지막에 세미콜론(;)을 반드시 기술

구조체 정의와 변수 선언 구조체 정의는 새로운 자료형을 정의하는 구문 변수 선언 구조체 정의 구문 후에 구조체 변수 선언

초기 값 지정 구조체 변수 mybook에 초기 값을 대입 멤버 참조 구조체 변수도 배열과 같이 중괄호를 이용하여 초기 값을 대입 가능 멤버 참조 구조체 멤버의 값을 알려면 멤버 접근 연산자인 마침표(.)를 이용 struct book mybook = {"C@book.com", “홍길동", …, 20000}; 구조체변수이름.멤버이름 mybook.author

구조체 포인터 구조체 변수의 주소 값을 저장하는 구조체 포인터 변수 변수 ku는 구조체 변수이고, 변수 ptr은 구조체를 가리키는 포인터 struct univ { char title[50]; // 이름 char address[50]; // 주소 int students; // 학생수 };   struct univ ku = {"한국대학교", "서울시 서초구", 5000}; struct univ *ptr = &ku; int num = ptr->students; // 구조체 포인터의 멤버 접근 연산자 ‘->’