1 / 17

포인터 변수의 선언

포인터 변수의 선언. int *ptr; int *ptr1, *ptr2; char *ptr3;. 포인터 변수의 크기 (test1.c). #include &lt;stdio.h&gt; int main(void) { printf(&quot;char 의 크기 : %d<br>&quot;, sizeof(char)); printf(&quot;short 의 크기 : %d<br>&quot;, sizeof(short)); printf(&quot;long 의 크기 : %d<br>&quot;, sizeof(long));

flavio
Télécharger la présentation

포인터 변수의 선언

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 포인터 변수의 선언 • int *ptr; • int *ptr1, *ptr2; • char *ptr3;

  2. 포인터 변수의 크기(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; }

  3. 포인터 변수의 사용 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]

  4. 포인터 변수의 초기화 • int *ptr = NULL;

  5. 메모리 할당과 해제 • 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>

  6. 포인터와 배열의 비교(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; }

  7. 포인터의 활용 (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; }

  8. & 연산자 • int var;int *ptr;ptr = &var;

  9. & 연산자 (test4.c) #include <stdio.h> int main(void) { int var = 100; int *ptr = NULL; ptr = &var; printf("var: %p\n", ptr); return 0; }

  10. * 연산자 • 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

  11. 포인터의 이동 • int val = 5;int *ptr = NULL;ptr = &val;ptr = ptr+1; • ptr += 1; • ptr++;

  12. 포인터의 이동(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; }

  13. [] 연산자 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

  14. 배열과 포인터(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; }

  15. 포인터 연산 정리 • 변수에 & 연산자 포인터 • 포인터에 * 연산자  포인터가 가리키는 데이터 • 포인터에 [] 연산자  포인터가 가리키는 위치부터 연속된 데이터 • 포인터의 덧셈, 뺄셈  포인터를 다음 데이터 위치로 이동

  16. 포인터에 익숙해지기 • 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;

  17. 실습과제 • 영어 단어를 입력 받아 A에 1점, B에 2점, C에 3점 이런 식으로 점수를 계산하는 프로그램을 작성하세요.

More Related