c study

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

Upload: thaddeus-nicoli

Post on 31-Dec-2015

30 views

Category:

Documents


0 download

DESCRIPTION

C study. Day 3 ~ Array. Written by Chang-young Koh. Today’s topic is. 배열 Array. 매우 중요해요 ! ( 아마 이 스터디에서 배우는 것중 가장 !) 그러니 포기하지 말고 끝까지 !. Index. 배열을 왜 쓰나 ? 배열의 기본적인 사용법 . 배열과 주소 , 포인터 . 약간은 특별한 배열 , 문자열. Why arrays?. 10 명의 학점을 입력받아 평균을 출력할 때. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: C study

C studyDay 3 ~ ArrayWritten by Chang-young Koh.

Page 2: C study

Today’s topic is..배열 Ar-

ray.- 매우 중요해요 !( 아마 이 스터디에서 배우는 것중 가장 !)-그러니 포기하지 말고 끝까지 !

Page 3: C study

Index

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

Page 4: C study

Why arrays?

- 10 명의 학점을 입력받아 평균을 출력할 때

scanf(“%d%d%d%d%d%d%d%d%d%d”,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9,&a10);

Page 5: C study

Why arrays?

- 100 명의 학점을 입력받아 평균을 출력할 때

int score[100], i ;for(i = 0 ; i < 100; i++)

scanf(“%d”,&score[i]);

Page 6: C study

Why arrays?

- 사용자의 학번을 입력받아 저장할 때

scanf(“%d”,&id);

Page 7: C study

Why arrays?

- 사용자의 이름을 입력받아 저장할 때

char name[22];scanf(“%s”,name);

Page 8: C study

How to use arrays?

- 배열의 선언int score[100];char name[22];

변수랑 거의 똑같다 !

자료형 이름 [ 크기 ]; - 크기는 변경 불가ㅠㅠ

- Declaration

Page 9: C study

How to use arrays?

- 배열의 초기화

int score[100] = {1,2,3,4};이렇게 하면 , score[0] = 1, score[1] = 2이런 식으로 들어가는데 ,정해주지 않은 score[4] 부터는 모두 0 이 된다 .

- Initialization

Page 10: C study

How to use arrays?

- 배열에 접근하는 방법int score[100] , i;for(i = 0 ; i < 100 ; i++)

scanf(“%d”,&score[i]);int sum = 0;for(i = 0 ; i < 100 ; i++)

sum + = score[i];역시 배열이랑 똑같다 !

- Access

Page 11: C study

How to use arrays?

- 배열에 접근하는 방법 ( 심화 )int score[100], i;for(i = 0; i < 100; i++)

scanf(“%d”,score + i);int sum = 0;for(i = 0; i < 100; i++)

sum += *(score+i);결과는 앞에서와 완벽히 같다 .

- Access (advanced)

Page 12: C study

How to use arrays?

- 배열에 접근하는 방법 ( 심화 )

솔직히 무슨 말인지 이해가 안 되죠 ?@_@...

- Access (advanced)

Page 13: C study

Pointer

여기서 짚고 넘어가는 포인터 Pointer!사실 포인터는 별거 없어요 .그냥 ‘주소’니까요 .

근데 이것만 잘 하면 2 학기가 편해지죠 .배열이랑도 관계가 많으니 열심히 해봅시다 !

- Introduction

Page 14: C study

Pointer- Declaration

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

Page 15: C study

Pointer- Access

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

Page 16: C study

Pointer- Why Pointer?

void swap1(int a, int b){int c = a;a = b;b = c;return;

}

Page 17: C study

Pointer- Why Pointer?

void swap2(int *a, int *b){int c = *a;*a = *b;*b = c;return;

}

Page 18: C study

Pointer- Why Pointer?

int x = 1000, y = 3;swap1(x,y);printf(“x = %d, y = %d\n”,x,y);

output :x = 1000, y = 3

바뀌지 않았다 !

Page 19: C study

Pointer- Why Pointer?

int x = 1000, y = 3;swap2(&x,&y);printf(“x = %d, y = %d\n”,x,y);

output :x = 3, y = 1000

!!!

Page 20: C study

Pointer- Why Pointer?

swap1 이 왜 안될까 ?void swap1(int a, int b) 은 ,

swap1(x,y) 을 호출할 때a = x;b = y; 와 같이 호출된다고 보면 된다 .그러니까 , 값이 복사된다 이 말이지 !

Page 21: C study

Pointer- Why Pointer?

그럼 swap2 는 왜 될까 ?

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

Page 22: C study

Pointer- Summary

- 포인터의 선언은 int *a;와 같은 식으로 변수명에 * 을 붙인다 .

- int *a 를 선언했으면 a 는 주소 , *a 는 그 주소에 담긴 값에 접근할 때 쓴다 !

Page 23: C study

Pointer- Summary

- 포인터의 선언은 int *a;와 같은 식으로 변수명에 * 을 붙인다 .

- int *a 를 선언했으면 a 는 주소 , *a 는 그 주소에 담긴 값에 접근할 때 쓴다 !

- 이 외에도 포인터에 관해선 할 말이 정말 많지만 , 그건 다음 기회에 !

Page 24: C study

How to use arrays?

- 배열에 접근하는 방법 ( 심화 )int score[100], i;for(i = 0; i < 100; i++)

scanf(“%d”,score + i);int sum = 0;for(i = 0; i < 100; i++)

sum += *(score+i);결과는 앞에서와 완벽히 같다 .

- Access (advanced)

Page 25: C study

How to use arrays?

- 배열에 접근하는 방법 ( 심화 )

int score[100];이 경우 ,score 은 &score[0] 와 같고 ,score + 1 은 &score[1] 와 같다 .

어렵게 설명하면 ,score + 1 = &score[0] + sizeof(int)*1이란 말이지 !

- Access (advanced)

Page 26: C study

How to use arrays?

- 배열에 접근하는 방법 ( 심화 )

int score[100];

그러니까 ,(score + i) 는 &score[i] 와 같고 ,당연히 *(score + i) 는 *(&score[i]),즉 score[i] 와 같다 !

- Access (advanced)

Page 27: C study

Array of characters- 약간은 특별한 배열 , ‘ 문자열’ .

char name[] = “Hello World!”문자열은 이렇게도 초기화 할 수 있다 !name[0] = ‘H’name[1] = ‘e’..name[12] = ‘!’name[13] = ‘\0’

Page 28: C study

Array of characters- 약간은 특별한 배열 , ‘ 문자열’ .

char name[] = “Hello World!”

name[12] = ‘!’name[13] = ‘\0’ ‘\0’ 은 문자열의 끝을 나타내는 문자 .NULL 문자라고 부른다 .

Page 29: C study

Array of characters- 약간은 특별한 배열 , ‘ 문자열’ .char name[22];scanf(“%s”.name);이렇게 하면 , 띄어쓰기나 줄바꿈 문자 전까지의 문자를 모두 받아서 name 배열에 넣어준다 .

주의할 점은 , 받을 문자열의 크기보다 배열의 크기를 1 크게 잡아야 한다는것 !( 널 문자 자리 !)

Page 30: C study

Array of characters- 약간은 특별한 배열 , ‘ 문자열’ .

char name[] = “Hello World!”;printf(“%s”,name);

이렇게 하면 , 널 문자가 나오기 전까지의 문자를 모두 출력한다 .name 이라는 배열의 ‘주소’ 가 인자로 들어가는 것에 주의 !

Page 31: C study

Array of characters- 약간은 특별한 배열 , ‘ 문자열’ .

관련 헤더 파일string.hcplusplus.com 에서 찾아볼 것 !

관련 함수 목록strlen : 문자열의 길이를 구한다 .strcpy : 문자열을 복사한다 .strcat : 두 문자열을 붙인다 .strcmp : 두 문자열을 비교한다 .…

Page 32: C study

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

Page 33: C study

Thank you!