7.포인터 -포인터란? : 메모리의 주소 값을 저장하기 위한 변수 : 포인터의 변수의 크기는 4바이트 (컴퓨터의 주소체계가 4바이트로 표현된다는 것을 의미) : * 연산자를 사용하여 포인터를 선언 : 포인터의 타입은 메모리를 참조하는 방법을 알려주는 역할을 한다 |
+ &연산자 : 주소값을 참조할 때 사용한다 ex) int main(void) { int a = 2005; int* pA = &a; ....... } + *연산자 : 포인터가 가리키는 메모리 참조 ex) int main(void) { int a = 2005; int* pA = &a; printf("%d",pA); printf("%d",*pA); // 2005출력 ....... }
ex) #include<stdio.h>
int main(void) { int a = 2005; int* pA = &a;
printf("pA : %d \n",pA); printf("&a : %d \n",&a);
(*pA)++;
printf("a: %d \n",a); printf("*pA: %d \n",*pA);
return 0; }
>포인터 배열 :배열 이름은 첫 번째 요소의 주소 값을 나타낸다 :포인터와 배열의 차이점 = 포인터는 변수, 배열의 이름은 상수 ex) #include<stdio.h>
int main(void) { int arr[3] = {0, 1, 2}; int *ptr;
ptr = arr;
printf("%d, %d, %d \n",ptr[0],ptr[1],ptr[2]);
:널 포인터 = 아무것도 가리키지 않는다는 의미
>문자열 배열 ex) #include<stdio.h> { char* arr[3] = { "Fervent-lecture", "TCP/IP", "Socket Programing" };
printf("%s \n",arr return 0; } >더블 포인터 :싱클 포인터를 가리킨다. ex) #include<stdio.h>
int main(void) { double val = 3.14; double *ptr1 = &val; // 싱글 포인터 double **ptr2 = &ptr1; // 더블 포인터 .....................
>포인터 배열 :배열에 메모리 주소 값을 저장할 수 있는 배열. 즉, 포인터를 모아놓은 배열이다. +형식 자료형 *(이름)[숫자]; ex) *(이름)[0], *(이름)[1] ....... #include<stdio.h> int main() { char *arr[3] = { "Fervent-lecture", "TCP/IP", "Socket Programming" };
printf("%s\n",arr[0]); printf("%s\n",arr[1]); printf("%s\n",arr[2]);
return 0; }
>배열 포인터 :배열을 가리킬 수 있는 포인터. +형식 자료형 (*이름)[숫자]; ex)(*이름) : 포인터, [숫자] : 숫자만큼 건너뛴다. #include<stdio.h>
void show_data(int (*ptr)[4], int a);
int main(void) { int arr1[2][4] = {1,2,3,4,5,6,7,8}; int arr2[3][4] = {{1},{2},{3}};
show_data(arr1, 2); show_data(arr2, 3);
return 0; }
void show_data(int (*ptr)[4], int a) { int i,j; printf("-----Start Print-----\n"); for(i=0;i<a;i++) { for(j=0;j<4;j++) printf("%d ",ptr[i][j]); printf("\n"); } }
>포인터 배열과 배열 포인터의 차이점 :포인터 배열 - 각각의 포인터마다 관계가 없는 서로 다른 주소값을 가리킬 수 있다. :배열 포인터 - 연속적인 메모리만 가리킬 수 있다. >함수 포인터 :메인 메모리에 올라와 있는 함수를 가리킬 수 있는 포인터 ex) #include<stdio.h>
void SelFunction(int s); void Add(void); void Min(void);
int main(void) { int sel;
while(1) { printf("선택 : 덧셈(1), 뺄셈(2), 종료(3) "); scanf("%d",&sel); if(sel == 3) break; SelFunction(sel); } printf("프로그램이 종료되었습니다. \n"); return 0; }
void SelFunction(int s) { void (*fPtr)(void); if(s == 1) fPtr = Add; else fPtr = Min; fPtr(); }
void Add(void) { int a, b; printf("덧셈을 위한 두 개의 숫자 입력 : "); scanf("%d %d",&a, &b); printf("덧셈 결과 : %d \n\n", a+b); }
void Min(void) { int a, b; printf("뺄셈을 위한 두 개의 숫자 입력 : "); scanf("%d %d",&a,&b); printf("뺄셈 결과 : %d \n\n", a-b); } <참조 : C 열혈강의> |
'삽질의 현장 > - C' 카테고리의 다른 글
[Surro] :: Pointer - 1. pointer의 이해 (0) | 2013.11.29 |
---|---|
[Surro] :: C언어 이론 08. 구조체 (0) | 2013.10.06 |
[Surro] :: C언어 이론 06. 배열 (0) | 2013.10.06 |
[Surro] :: C언어 이론 05. 함수 (0) | 2013.10.06 |
[Surro] :: C언어 이론 04. 조건문 (0) | 2013.10.06 |