170 likes | 396 Views
포인터 변수의 선언. int *ptr; int *ptr1, *ptr2; char *ptr3;. 포인터 변수의 크기 (test1.c). #include <stdio.h> int main(void) { printf("char 의 크기 : %d<br>", sizeof(char)); printf("short 의 크기 : %d<br>", sizeof(short)); printf("long 의 크기 : %d<br>", sizeof(long));
E N D
포인터 변수의 선언 • int *ptr; • int *ptr1, *ptr2; • char *ptr3;
포인터 변수의 크기(test1.c) #include <stdio.h> int main(void) { printf("char의 크기 : %d\n", sizeof(char)); printf("short의 크기 : %d\n", sizeof(short)); printf("long의 크기 : %d\n", sizeof(long)); printf("int의 크기 : %d\n", sizeof(int)); printf("float의 크기 : %d\n", sizeof(float)); printf("double의 크기 : %d\n", sizeof(double)); printf("\n"); printf("char형 포인터의 크기 : %d\n", sizeof(char*)); printf("short형 포인터의 크기 : %d\n", sizeof(short*)); printf("long형 포인터의 크기 : %d\n", sizeof(long*)); printf("int형 포인터의 크기 : %d\n", sizeof(int*)); printf("float형 포인터의 크기 : %d\n", sizeof(float*)); printf("double형 포인터의 크기 : %d\n", sizeof(double*)); return 0; }
포인터 변수의 사용 int *ptr = 메모리 주소; ptr[0] = 0; ptr[1] = 10; ... ptr[9] = 90; ptr, &ptr[0] *(ptr+i), ptr[i] (ptr+i), &ptr[i] ptr ptr[0] ptr[1] ptr[2] ptr[3] ptr[4] ptr[5] ptr[6] ptr[7] ptr[8] ptr[9]
포인터 변수의 초기화 • int *ptr = NULL;
메모리 할당과 해제 • int *ptr = (int *)malloc(sizeof(int) * 10); • ptr = (int *)calloc(10, sizeof(int)); • ptr = (int *)realloc(ptr, 20*sizeof(int)); • free(ptr); • #include <malloc.h>
포인터와 배열의 비교(test2.c) #include <stdio.h> #include <string.h> #include <malloc.h> #define MAX_INPUT 256 int main(void) { char input[MAX_INPUT]={0}; // 입력을 받기 위한 배열 char *output=NULL; // 출력을 저장하기 위한 포인터 int length, ch; fgets(input, MAX_INPUT-1, stdin); // 사용자로부터 문자열을 입력 받음 length = strlen(input)+1; // NULL을 포함한 문자열의 길이만큼 output = (char *)malloc(length); // 메모리를 할당 받음 for(ch=0 ; ch<length ; ch++) { if(input[ch] >= 'a' && input[ch] <= 'z') output[ch] = input[ch] + 'A'-'a'; // 소문자면 대문자로 변환 else output[ch] = input[ch]; } printf("Input : %s", input); // 입력 값 표시 printf("Output: %s", output); // 출력 값 표시 free(output); // 메모리 반납 return 0; }
포인터의 활용 (test3.c) #include <stdio.h> #include <malloc.h> int main(void) { int students, s, sum=0; int *score=NULL; printf(“Num. of students : "); scanf("%d", &students); score=(int *)malloc(sizeof(int)*students); printf(“Input student grade\n"); for(s=0 ; s<students ; s++) { printf("%dNo.: ", s+1); scanf("%d", &score[s]); } printf("----------------------\n"); for(s=0 ; s<students ; s++) { sum += score[s]; printf("%dNo.: %3d\n", s+1, score[s]); } printf("----------------------\n"); printf(“Total: %3d\n", sum); printf(“Grade: %3.2f\n", (double)sum/students); free(score); return 0; }
& 연산자 • int var;int *ptr;ptr = &var;
& 연산자 (test4.c) #include <stdio.h> int main(void) { int var = 100; int *ptr = NULL; ptr = &var; printf("var: %p\n", ptr); return 0; }
* 연산자 • int result, var1=3, var2=5;result = var1 * var2; • int *ptr; • short var1=1, var2=2;short *ptr = NULL;ptr = &var1;var2 = *ptr; 1000 var1=1 1001 1002 var2=1 1003 1004 1005 ptr=1000 1006 1007 1008 1009 1010
포인터의 이동 • int val = 5;int *ptr = NULL;ptr = &val;ptr = ptr+1; • ptr += 1; • ptr++;
포인터의 이동(test5.c) #include <stdio.h> int main(void) { char *ptrChar = NULL; short *ptrShort = NULL; int *ptrInt = NULL; printf("charpointer inc.: %d\n", ++ptrChar); printf("shortpointer inc. : %d\n", ++ptrShort); printf("intpointer inc. : %d\n", ++ptrInt); return 0; }
[] 연산자 1000 1000 p[0] 1001 *ptr 1001 1002 1002 p[1] 1003 *(ptr+1) 1003 1004 1004 p[2] 1005 *(ptr+2) 1005 1006 1006 p[3] 1007 *(ptr+3) 1007 1008 1008 p[4] 1009 *(ptr+4) 1009 1010 1010 1011 1011 1012 1012 1013 1013 1014 p=1000 1014 ptr=1000 1015 1015
배열과 포인터(test6.c) #include <stdio.h> int main(void) { short array[3]; short *ptr = array; ptr[0] = 0; ptr[1] = 10; ptr[2] = 20; printf("array reference:\t"); printf("%d, %d, %d\n", array[0], array[1], array[2]); printf("ptr reference:\t"); printf("%d, %d, %d\n\n", ptr[0], ptr[1], ptr[2]); printf("array address:\t %p\n", array); printf("ptr address:\t %p\n", ptr); return 0; }
포인터 연산 정리 • 변수에 & 연산자 포인터 • 포인터에 * 연산자 포인터가 가리키는 데이터 • 포인터에 [] 연산자 포인터가 가리키는 위치부터 연속된 데이터 • 포인터의 덧셈, 뺄셈 포인터를 다음 데이터 위치로 이동
포인터에 익숙해지기 • short array[3];short *ptr = array;ptr[0] = 0;ptr[1] = 10;ptr[2] = 20; • short array[3];short *ptr = array;*ptr = 0;*(ptr+1) = 10;*(ptr+2) = 20; • short array[3];short *ptr = array;*ptr++ = 0;*ptr++ = 10;*ptr = 20; • short array[3];short *ptr = array;*ptr = 0;*(++ptr) = 10;*(++ptr) = 20; • short array[3]; short *ptr = &array[0];ptr[0] = 0;ptr[1] = 10;ptr[2] = 20;
실습과제 • 영어 단어를 입력 받아 A에 1점, B에 2점, C에 3점 이런 식으로 점수를 계산하는 프로그램을 작성하세요.