컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 - 김선균 (kyun@kangwon.ac.kr) 2017. 05. 31
< 목 차 > 선택정렬 vs 버블정렬 포인터의 개념 포인터의 선언 및 간접 참조 연산자 배열과 포인터 < 목 차 > 선택정렬 vs 버블정렬 포인터의 개념 포인터의 선언 및 간접 참조 연산자 배열과 포인터 포인터를 응용한 swap 함수 포인터 응용 예제 문자열 표현 방법 문자열 함수 활용
0. 정렬 – 선택 정렬(Selection Sort) 선택 정렬 – 정렬이 안된 숫자 중에서 최소 값을 선택하여 배열의 첫 번째 요소와 교환
0. 정렬 – 선택 정렬(Selection Sort) 선택 정렬 프로그래밍
0. 정렬 – 선택 정렬(Selection Sort)
0. 정렬 – 버블 정렬(Bubble Sort) 버블 정렬 인접한 레코드가 순서대로 되어 있지 않으면 교환 전체가 정렬될까지 비교/교환 계속
0. 정렬 – 버블 정렬(Bubble Sort) 버블 정렬 프로그래밍
0. 정렬 – 버블 정렬(Bubble Sort) 버블 정렬 프로그래밍
1. 포인터의 개념 포인터 변수에는 값을 저장... 포인터에는 주소를 저장 주소 – 컴퓨터 상에서 메모리의 위치 주소를 계산하는 연산자 : & 변수 i의 주소 : &i 포인터의 생성 : [자료형] *[이름] = [주소 값]; 포인터는 꼭 선언과 동시에 초기화가 이루어져야 한다. ex) int a; // 변수의 생성 ex) int *pa = &a; // 포인터 생성 및 초기화
2. 포인터의 선언 및 간접 참조 연산자 간접 참조 연산자( * ) 포인터가 가리키는 값을 가져옴 포인터 생성 시 쓰는 *과는 다른 의미 포인터의 선언과 간접 참조 연산자의 차이점 포인터의 선언 : [자료형] *[이름] = [주소 값] 간접 참조 연산자 : *[포인터 이름]
2. 포인터의 선언 및 간접 참조 연산자 #include <stdio.h> int main(void) { int i = 10; int *pi = &i; printf(“i = %d, pi = %u\n”, i, pi); (*pi)++; *pi++; return 0; } i = 10, pi = 4290777068 i = 11, pi = 4290777068 i = 11, pi = 4290777072
3. 포인터와 배열 배열의 이름은...? 배열의 첫 번째 값의 주소를 의미한다. 배열의 이름 또한 주소 값을 의미하므로, 굳이 따지자면 포인터의 역할을 한다고 말할 수 있다.
3. 포인터와 배열 #include <stdio.h> int main(void) { int a[] = {10, 20, 30, 40, 50}; printf(“&a[0] = %u\n”, &a[0]); printf(“&a[1] = %u\n”, &a[1]); printf(“&a[2] = %u\n”, &a[2]); printf(“a = %u\n”, a); // 배열의 이름이 어떤 주소 값을 가지는지 // 확인해보자. return 0; } &a[0] = 4290777068 &a[1] = 4290777072 &a[2] = 4290777076 a = 4290777068
3. 포인터와 배열 #include <stdio.h> a = 4290777068 int main(void) { int a[] = {10, 20, 30, 40, 50}; printf(“a = %u\n”, a); printf(“a+1 = %u\n”, a+1); printf(“*a = %d\n”, *a); printf(“*(a+1) = %d\n”, *(a+1)); // 그렇다면 여기서 a[1] == *(a+1)과 같은 의미겠지요.. return 0; } a = 4290777068 a+1 = 4290777072 *a = 10 *(a+1) = 20
4. swap() 함수 구현 – 일반 변수 사용 #include <stdio.h> int swap(int x, int y); int main(void) { int a = 100, b = 200; printf(“main() a = %d, b = %d\n”, a, b); swap(a, b); return 0; } void swap(int x, int y) { int temp; printf(“swap() x = %d, y = %d\n”, x, y); temp = x; x = y; y = temp; } main() a = 100, b = 200 swap() x = 100, y = 200 swap() x = 200, y = 100
4. swap() 함수 구현 – 포인터 사용 #include <stdio.h> int swap(int *x, int *y); int main(void) { int a = 100, b = 200; printf(“main() a = %d, b = %d\n”, a, b); swap(&a, &b); return 0; } void swap(int *x, int *y) { int temp; printf(“swap() x = %d, y = %d\n”, *x, *y); temp = *x; *x = *y; *y = temp; } main() a = 100, b = 200 swap() x = 100, y = 200 swap() x = 200, y = 100 main() a = 200, b = 100
5. 포인터 응용 예제 #include <stdio.h> // 기울기와 y절편을계산 int get_line_parameter(int x1, int y1, int x2, int y2, float *slope, float *yintercept) { if( x1 == x2 ) return -1; else { *slope = (float)(y2 - y1)/(float)(x2 - x1); *yintercept = y1 - (*slope)*x1; return 0; } int main(void) float s, y; if( get_line_parameter(3, 3, 6, 6, &s, &y) == -1 ) printf("에러\n"); else printf("기울기는 %f, y절편은 %f\n", s, y); 기울기는 1.000000, y절편은 0.000000
6. 문자열의 표현 방법 문자 : 문자는 보통 한 글자를 의미 문자열 : 문자 + 배열로 여러 개의 문자가 나열된 것을 의미 ex) ‘A’, ‘S’, ‘C’ 문자열 : 문자 + 배열로 여러 개의 문자가 나열된 것을 의미 ex) “Computer”, “Programming” 문자열 뒤에는 항상 ‘\0’(NULL) 문자가 존재한다.
6. 문자열의 표현 방법 문자열(문자 배열)을 만들고 연속으로 출력
6. 문자열의 표현 방법 문자열 중 일부를 수정하여 재 출력하는 프로그램
6. 문자열의 표현 방법 문자열 역순 출력하는 프로그램
7. 문자열 함수 활용 – getchar(), putchar()
7. 문자열 함수 활용 – gets(), puts()
7. 문자열 함수 활용 – strcpy(), strcat()
7. 문자열 함수 활용 – strcmp() 문자열의 비교 : strcmp()
7. 문자열 함수 활용 – strcmp()
4. Q&A