반응형
1. 포인터의 개념, 선언방법
포인터의 개념은 주소만 저장하는 변수는 포인터 변수라고한다.
포인터 변수를 줄여 포인터로 말한다.
포인터를 제대로 사용하기 위해 세가지 과정이 필요하다.
① 포인터 변수도 일반 변수처럼 선언을 해야 사용할 수 있다.
② 포인터 변수가 특정 기억장소를 가리키게 하려면 가리키고 싶은 기억장소의 주소를 대입해야한다.
③ 포인터 변수에 저장된 주소를 이용해 다른 기억장소를 참조하려면 특별한 연산자인 간접연산자 '*'를 이용해야한다.
<포인터 변수 선언>
자료형 *포인터변수명;
↘ * : 정확히는 간접 참조 연산이지만 여기서는 선언하는 변수가 일반 변수가 아니라 단순히 포인터 변수임을 표시하는 기호라고 생각하자.
↘ 자료형 : 포인터 변수가 가리키는 기억장소에 저장될 자료의 형이다.
2. 배열을 포인터로 전달받기. 프로그램 10-8
<소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <stdio.h> #include <stdlib.h> #define N 4 void print_arr(int *arr); void percentage(int *arr); int main(int argc, char *argv[]) { int count[N] = {42, 37, 83, 33}; printf("인원수 >> "); print_arr(count); //배열 이름 = 시작 주소 printf("\n\n백분율 >> "); percentage(count); print_arr(count); return 0; } void print_arr(int *arr) { int i; for(i=0;i<N;i++) printf("%3d",*(arr+i)); //arr[i] = *(arr+i) } void percentage(int *arr) { int i, total = 0; for(i=0;i<N;i++) total += *(arr+i); //total += arr[i]; for(i=0;i<N;i++) *(arr+i) = (int)((double)*(arr+i)/total*100); } | cs |
<실행결과>
3. 포인터 변수의 교환으로 두 문자열 교환하기. 프로그램 10-10
<소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char *first = "GilDong", *last = "Hong"; //이름과 성을 주소로 선언해주었다. char *temp; //문자열 주소를 임시로 저장할 포인터 변수 printf("Before Name : %s %s\n",first,last); //포인터 변수에 저장된 두 주소를 교환해 두 포인터가 가리키는 문자열 교환하기 temp = first; first = last; last = temp; printf("After Name : %s %s\n",first,last); return 0; } | cs |
<실행 결과>
4. char형 배열을 이용한 두 문자열의 교환. 프로그램 10-11
<소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdio.h> #include <stdlib.h> #include <string.h> //strcpy함수를 위한 헤더파일 int main(int argc, char *argv[]) { char first[10] = "GilDong", last[10] = "Hong"; //이름과 성 char temp[10]; //문자열을 임시로 저장할 배열 printf("Before Name : %s %s\n",first, last); //배열의 내용을 직접 교환하여 두 문자열을 교환하기 strcpy(temp,first); //first배열의 문자열을 temp배열에 복사하기 strcpy(first,last); //last 배열의 문자열을 first배열에 복사하기 strcpy(last,temp); //temp 배열의 문자열을 last 배열에 복사하기 printf("Last Name : %s %s\n",first,last); return 0; } | cs |
<실행결과>
5. char형 2차원 배열을 이용한 문자열 저장 및 정렬. 프로그램 10-15
<소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <stdio.h> #include <stdlib.h> #include <string.h> //strcmp,strcpy 함수를 위한 헤더파일 #define SIZE 5 //배열의 원소수 int main(int argc, char *argv[]) { int i, pass; char temp[10]; //문자열 한 개를 임시로 저장할 배열 char silver[5][10] = {"나태희", "유빈", "나원빈", "문건영", "소지법"}; printf(" *** 은메달 리스트 : "); for(i=0;i<SIZE;i++) //정렬 전 재열내용출력하기 printf("%s, ",silver[i]); printf("\b\b ** \n"); //\b를 이용하여 마지막 이름 뒤의 , 지우기 //버블 정렬을 이용하여 이름을 가나다순으로 정렬하기 for(pass = 1; pass<SIZE; pass++) for(i=0;i<SIZE-pass;i++) if(strcmp(silver[i],silver[i+1])>0) { strcpy(temp,silver[i]); strcpy(silver[i],silver[i+1]); strcpy(silver[i+1],temp); } printf(" *** 정렬한 리스트 : "); for(i=0;i<SIZE;i++) //정렬 후 배열 내용 출력하기 printf("%s, ",silver[i]); printf("\b\b ** \n"); //\b를 이용하여 마지막 이름 뒤의 , 지우기 return 0; } | cs |
<실행 결과>
6. char형 포인터배열을 이용한 문자열 저장 및 정렬. 프로그램 10-16
<소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include <stdio.h> #include <stdlib.h> #include <string.h> //strcmp,strcpy 함수를 위한 헤더파일 int main(int argc, char *argv[]) { char *gold[] = {"한빛", "성춘향", "이몽룡", "사공민국", "황해"}; int i, j, size; //배열에 저장된 문자열의 수 char *temp; //문자열 주소를 임시로 저장할 포인터 size = sizeof(gold) / sizeof(gold[0]); printf("** 금메달 리스트 **\n"); for(i=0; i<size; i++) //정렬 전 배열 내용 출력하기 printf("%s, ", gold[i]); printf("\b\b**\n\n"); //\b를 이용하여 마지막 이름 뒤의 , 지우기 //교환 정렬을 이용하여 이름을 가나다순으로 정렬하기 for(i=0; i<size-1; i++) for(j=i+1; j<size; j++) if(strcmp(gold[i], gold[j])>0) { //문자열의 시작주소를 저장한 gold[i]와 gold[j]를 교환 temp = gold[i]; gold[i] = gold[j]; gold[j] = temp; } printf("** 정렬한 리스트 : \n"); for(i=0; i<size; i++) //정렬 후 배열 내용 출력하기 printf("%s ,", gold[i]); printf("\b\b ** \n\n"); //\b를 이용하여 마지막 이름 뒤의 , 지우기 return 0; } | cs |
<실행결과>
반응형
'공부 > C programming' 카테고리의 다른 글
ㅇ (0) | 2016.06.02 |
---|---|
11. 구조체 (0) | 2016.05.24 |
9. 변수의 참조 영역과 지속기간 (0) | 2016.05.13 |
dd (0) | 2016.05.12 |
8. 함수 (0) | 2016.05.10 |