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!