C study Day 3 ~ Array Written by Chang-young Koh..

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.
일 시 : (목) 장 소 : 문산종합사회복지관장) 파주시문산종합사회복지관 기관안내.
컴퓨터 개론 및 실습 강의 6 서울대학교 기계항공공학부 담당 : 김 찬 중.
4장 배열과 함수 한빛미디어(주).
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
쉽게 풀어쓴 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;
제14장 동적 메모리.
8. 배열.
제 9 장 구조체와 공용체.
-Part2- 제3장 포인터란 무엇인가.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
5장. 참조 타입.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제 3장. C보다 나은 C++ II.
C 프로그래밍.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
포인터 활용 포인터 활용.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
프로그래밍 랩 – 7주 리스트.
14장. 포인터와 함수에 대한 이해.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
-Part3- 제2장 문자열 표준 함수와 기타 표준 함수
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 8 장 배열, 주소, 포인터.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
프로그래밍 개요
인터넷응용프로그래밍 JavaScript(Intro).
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
Chapter 08. 함수.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
구조체 배열 실습: 평점이 최고인 학생의 정보를 출력하기
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
에어 PHP 입문.
2장 PHP 기초 PHP의 시작과 끝을 이해한다. 주석문에 대하여 이해한다. echo 문을 이용하여 화면에 출력하
7주차: Functions and Arrays
함수, 모듈.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
김선균 컴퓨터 프로그래밍 기초 - 12th : 문자열 - 김선균
어서와 C언어는 처음이지 제21장.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

C study Day 3 ~ Array Written by Chang-young Koh.

Today’s topic is.. 배열Array. 매우 중요해요! 그러니 포기하지 말고 끝까지! (아마 이 스터디에서 배우는 것중 가장!) 그러니 포기하지 말고 끝까지!

Index 배열을 왜 쓰나? 배열의 기본적인 사용법. 배열과 주소, 포인터. 약간은 특별한 배열, 문자열.

Why arrays? 10명의 학점을 입력받아 평균을 출력할 때 scanf(“%d%d%d%d%d%d%d%d%d%d”,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9,&a10);

Why arrays? 100명의 학점을 입력받아 평균을 출력할 때 int score[100], i ; for(i = 0 ; i < 100; i++) scanf(“%d”,&score[i]);

Why arrays? 사용자의 학번을 입력받아 저장할 때 scanf(“%d”,&id);

Why arrays? 사용자의 이름을 입력받아 저장할 때 char name[22]; scanf(“%s”,name);

How to use arrays? 배열의 선언 int score[100]; char name[22]; 변수랑 거의 똑같다! - Declaration 배열의 선언 int score[100]; char name[22]; 변수랑 거의 똑같다! 자료형 이름[크기]; - 크기는 변경 불가ㅠㅠ

How to use arrays? 배열의 초기화 int score[100] = {1,2,3,4}; - Initialization 배열의 초기화 int score[100] = {1,2,3,4}; 이렇게 하면, score[0] = 1, score[1] = 2 이런 식으로 들어가는데, 정해주지 않은 score[4]부터는 모두 0이 된다.

How to use arrays? 배열에 접근하는 방법 int score[100] , i; - Access 배열에 접근하는 방법 int score[100] , i; for(i = 0 ; i < 100 ; i++) scanf(“%d”,&score[i]); int sum = 0; sum + = score[i]; 역시 배열이랑 똑같다!

How to use arrays? 배열에 접근하는 방법 (심화) int score[100], i; - Access (advanced) 배열에 접근하는 방법 (심화) int score[100], i; for(i = 0; i < 100; i++) scanf(“%d”,score + i); int sum = 0; sum += *(score+i); 결과는 앞에서와 완벽히 같다.

How to use arrays? 솔직히 무슨 말인지 이해가 안 되죠? @_@... 배열에 접근하는 방법 (심화) - Access (advanced) 배열에 접근하는 방법 (심화) 솔직히 무슨 말인지 이해가 안 되죠? @_@...

Pointer 여기서 짚고 넘어가는 포인터Pointer! 사실 포인터는 별거 없어요. 그냥 ‘주소’니까요. - Introduction 여기서 짚고 넘어가는 포인터Pointer! 사실 포인터는 별거 없어요. 그냥 ‘주소’니까요. 근데 이것만 잘 하면 2학기가 편해지죠. 배열이랑도 관계가 많으니 열심히 해봅시다!

Pointer int *a; /*별을 붙이면 포인터!*/ int b; a = &b; scanf(“%d”,a); - Declaration int *a; /*별을 붙이면 포인터!*/ int b; a = &b; scanf(“%d”,a); printf(“b = %d = %d”,b,*a);

Pointer printf(“b = %d = %d”,b,*a); /* a에 별을 붙인 *a 는 - Access printf(“b = %d = %d”,b,*a); /* a에 별을 붙인 *a 는 a가 가리키는 주소(&b) 의 값, 즉 b의 값을 나타낸다 */

Pointer void swap1(int a, int b){ int c = a; a = b; b = c; return; } - Why Pointer? void swap1(int a, int b){ int c = a; a = b; b = c; return; }

Pointer void swap2(int *a, int *b){ int c = *a; *a = *b; *b = c; - Why Pointer? void swap2(int *a, int *b){ int c = *a; *a = *b; *b = c; return; }

Pointer int x = 1000, y = 3; swap1(x,y); - Why Pointer? int x = 1000, y = 3; swap1(x,y); printf(“x = %d, y = %d\n”,x,y); output : x = 1000, y = 3 바뀌지 않았다!

Pointer int x = 1000, y = 3; swap2(&x,&y); - Why Pointer? int x = 1000, y = 3; swap2(&x,&y); printf(“x = %d, y = %d\n”,x,y); output : x = 3, y = 1000 !!!

Pointer swap1이 왜 안될까? void swap1(int a, int b)은, swap1(x,y) 을 호출할 때 - Why Pointer? swap1이 왜 안될까? void swap1(int a, int b)은, swap1(x,y) 을 호출할 때 a = x; b = y; 와 같이 호출된다고 보면 된다. 그러니까, 값이 복사된다 이 말이지!

Pointer 그럼 swap2는 왜 될까? void swap2(int *a, int *b)은, 아까 배웠듯이! - Why Pointer? 그럼 swap2는 왜 될까? void swap2(int *a, int *b)은, 아까 배웠듯이! swap(&x,&y)를 호출하면 a = &x; b = &y; 와 같이 호출된다고 보면 된다. 그러니까, 주소가 복사된다 이 말이지.

Pointer - 포인터의 선언은 int *a; 와 같은 식으로 변수명에 *을 붙인다. int *a를 선언했으면 - Summary - 포인터의 선언은 int *a; 와 같은 식으로 변수명에 *을 붙인다. int *a를 선언했으면 a는 주소, *a는 그 주소에 담긴 값에 접근할 때 쓴다!

Pointer - 포인터의 선언은 int *a; 와 같은 식으로 변수명에 *을 붙인다. int *a를 선언했으면 - Summary - 포인터의 선언은 int *a; 와 같은 식으로 변수명에 *을 붙인다. int *a를 선언했으면 a는 주소, *a는 그 주소에 담긴 값에 접근할 때 쓴다! - 이 외에도 포인터에 관해선 할 말이 정말 많지만, 그건 다음 기회에!

How to use arrays? 배열에 접근하는 방법 (심화) int score[100], i; - Access (advanced) 배열에 접근하는 방법 (심화) int score[100], i; for(i = 0; i < 100; i++) scanf(“%d”,score + i); int sum = 0; sum += *(score+i); 결과는 앞에서와 완벽히 같다.

How to use arrays? 배열에 접근하는 방법 (심화) int score[100]; 이 경우, - Access (advanced) 배열에 접근하는 방법 (심화) int score[100]; 이 경우, score 은 &score[0] 와 같고, score + 1 은 &score[1] 와 같다. 어렵게 설명하면, score + 1 = &score[0] + sizeof(int)*1 이란 말이지!

How to use arrays? 배열에 접근하는 방법 (심화) int score[100]; 그러니까, - Access (advanced) 배열에 접근하는 방법 (심화) int score[100]; 그러니까, (score + i) 는 &score[i]와 같고, 당연히 *(score + i) 는 *(&score[i]), 즉 score[i]와 같다!

Array of characters 약간은 특별한 배열, ‘문자열’ . char name[] = “Hello World!” 문자열은 이렇게도 초기화 할 수 있다! name[0] = ‘H’ name[1] = ‘e’ . name[12] = ‘!’ name[13] = ‘\0’

Array of characters 약간은 특별한 배열, ‘문자열’ . char name[] = “Hello World!” ‘\0’은 문자열의 끝을 나타내는 문자. NULL문자라고 부른다.

Array of characters 약간은 특별한 배열, ‘문자열’ . char name[22]; scanf(“%s”.name); 이렇게 하면, 띄어쓰기나 줄바꿈 문자 전까지의 문자를 모두 받아서 name 배열에 넣어준다. 주의할 점은, 받을 문자열의 크기보다 배열의 크기를 1 크게 잡아야 한다는것! (널 문자 자리!)

Array of characters 약간은 특별한 배열, ‘문자열’ . char name[] = “Hello World!”; printf(“%s”,name); 이렇게 하면, 널 문자가 나오기 전까지의 문자를 모두 출력한다. name이라는 배열의 ‘주소’ 가 인자로 들어가는 것에 주의!

Array of characters 약간은 특별한 배열, ‘문자열’ . 관련 헤더 파일 string.h cplusplus.com 에서 찾아볼 것! 관련 함수 목록 strlen : 문자열의 길이를 구한다. strcpy : 문자열을 복사한다. strcat : 두 문자열을 붙인다. strcmp : 두 문자열을 비교한다. …

Summary 배열의 선언 : int score[100]; 배열에 접근 : score[1], &score[1] 배열에 접근(심화) : (score + 1) = &score[1] *(score + 1) = *(&score[1]) = score[1] 문자열 : 문자열의 끝을 나타내는 널 문자 ‘\0’, 그리고 %s

Thank you!