c study
DESCRIPTION
C study. Day 3 ~ Array. Written by Chang-young Koh. Today’s topic is. 배열 Array. 매우 중요해요 ! ( 아마 이 스터디에서 배우는 것중 가장 !) 그러니 포기하지 말고 끝까지 !. Index. 배열을 왜 쓰나 ? 배열의 기본적인 사용법 . 배열과 주소 , 포인터 . 약간은 특별한 배열 , 문자열. Why arrays?. 10 명의 학점을 입력받아 평균을 출력할 때. - PowerPoint PPT PresentationTRANSCRIPT
C studyDay 3 ~ ArrayWritten by Chang-young Koh.
Today’s topic is..배열 Ar-
ray.- 매우 중요해요 !( 아마 이 스터디에서 배우는 것중 가장 !)-그러니 포기하지 말고 끝까지 !
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
How to use arrays?
- 배열의 초기화
int score[100] = {1,2,3,4};이렇게 하면 , score[0] = 1, score[1] = 2이런 식으로 들어가는데 ,정해주지 않은 score[4] 부터는 모두 0 이 된다 .
- Initialization
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
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)
How to use arrays?
- 배열에 접근하는 방법 ( 심화 )
솔직히 무슨 말인지 이해가 안 되죠 ?@_@...
- Access (advanced)
Pointer
여기서 짚고 넘어가는 포인터 Pointer!사실 포인터는 별거 없어요 .그냥 ‘주소’니까요 .
근데 이것만 잘 하면 2 학기가 편해지죠 .배열이랑도 관계가 많으니 열심히 해봅시다 !
- Introduction
Pointer- Declaration
int *a;/* 별을 붙이면 포인터 !*/int b;a = &b;scanf(“%d”,a);printf(“b = %d = %d”,b,*a);
Pointer- Access
printf(“b = %d = %d”,b,*a);/* a 에 별을 붙인 *a 는a 가 가리키는 주소 (&b) 의 값 , 즉b 의 값을 나타낸다 */
Pointer- Why Pointer?
void swap1(int a, int b){int c = a;a = b;b = c;return;
}
Pointer- Why Pointer?
void swap2(int *a, int *b){int c = *a;*a = *b;*b = c;return;
}
Pointer- Why Pointer?
int x = 1000, y = 3;swap1(x,y);printf(“x = %d, y = %d\n”,x,y);
output :x = 1000, y = 3
바뀌지 않았다 !
Pointer- Why Pointer?
int x = 1000, y = 3;swap2(&x,&y);printf(“x = %d, y = %d\n”,x,y);
output :x = 3, y = 1000
!!!
Pointer- Why Pointer?
swap1 이 왜 안될까 ?void swap1(int a, int b) 은 ,
swap1(x,y) 을 호출할 때a = x;b = y; 와 같이 호출된다고 보면 된다 .그러니까 , 값이 복사된다 이 말이지 !
Pointer- Why Pointer?
그럼 swap2 는 왜 될까 ?
void swap2(int *a, int *b) 은 ,아까 배웠듯이 !swap(&x,&y) 를 호출하면a = &x;b = &y;와 같이 호출된다고 보면 된다 .그러니까 , 주소가 복사된다 이 말이지 .
Pointer- Summary
- 포인터의 선언은 int *a;와 같은 식으로 변수명에 * 을 붙인다 .
- int *a 를 선언했으면 a 는 주소 , *a 는 그 주소에 담긴 값에 접근할 때 쓴다 !
Pointer- Summary
- 포인터의 선언은 int *a;와 같은 식으로 변수명에 * 을 붙인다 .
- int *a 를 선언했으면 a 는 주소 , *a 는 그 주소에 담긴 값에 접근할 때 쓴다 !
- 이 외에도 포인터에 관해선 할 말이 정말 많지만 , 그건 다음 기회에 !
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)
How to use arrays?
- 배열에 접근하는 방법 ( 심화 )
int score[100];이 경우 ,score 은 &score[0] 와 같고 ,score + 1 은 &score[1] 와 같다 .
어렵게 설명하면 ,score + 1 = &score[0] + sizeof(int)*1이란 말이지 !
- Access (advanced)
How to use arrays?
- 배열에 접근하는 방법 ( 심화 )
int score[100];
그러니까 ,(score + i) 는 &score[i] 와 같고 ,당연히 *(score + i) 는 *(&score[i]),즉 score[i] 와 같다 !
- Access (advanced)
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!”
name[12] = ‘!’name[13] = ‘\0’ ‘\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.hcplusplus.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!