Prosto

포인터 (Pointer) - 기초2 본문

Programing/C Programing

포인터 (Pointer) - 기초2

Prosto 2011. 5. 17. 09:29

포인터의 포인터..
int * ptr; 이라는 포인터가 있을 때
int ** dptr; 이라는 것도 있을 수 있습니다.

간단한 예문

#include<stdio.h>

int main(void)
{
   int na=20;
   int * ptr = &na;
   int ** dptr = &ptr;

   printf("%#x \n%#x \n%#x \n\n", na, ptr, dptr);
   printf("%d,  %d,  %d", na, *ptr, **dptr);

   return 0;
}

위에서 볼 수 있듯
na = *ptr = **dptr 결과라는 것을 알 수 있습니다.

**dptr -가리킴-> *ptr -가리킴-> na

dptr은 ptr의 주소를 가리키고 있고,
ptr은 na의 주소를 가리키고 있습니다.
그렇기에 na = *ptr = **dptr이 된거죠.
저번에 있던 포인터 포스트의 확장 정도로 보면 됩니다.

그런식으로
*, **, *** ...과 같이 포인터가 이중, 삼중... 으로 사용 가능한 것이죠.


 포인터 배열
포인터와 배열의 개념을 합친 것.
int arr[3];
  ->int형 arr변수 배열 선언.
int* arr[3]
  ->int형 포인터 arr변수 배열 선언.

문자열 배열
- 2차원 배열 기반의 문자열 배열
- 포인터 기반의 문자열 배열
char*(캐릭터형 포인터)로 '캐릭터형 문자열'을 가리킵니다.
동적입니다. 가리키는 것이기 때문에 배열이 바뀔 수 있습니다.
1.
char str1[]="Hello";
char str2[]="Programing";
char str3[]="Story";
char *stArr[3] = {str1, str2, str3};
  -> *stArr[0][1][2] => str1, str2, str3의 주소값으로 사용.
2.
char *stArr[3] = {"Hello", "Programing", "Story"};
  -> *stArr[0][1][2] => H, P, S의 주소값 반환 받아 사용.

각 상황에 맞게 선택하여 사용하는 것이 좋습니다!


궁금한 점 있으시거나, 추가 도움말 주실 분은 댓글 달아주세요 ^^

'Programing > C Programing' 카테고리의 다른 글

컴파일 에러 (LNK1207, RC1015 등)  (0) 2016.09.09
난수 발생 시키기.  (0) 2011.09.25
1년 달력 계산 (윤년)  (5) 2011.05.15
포인터 (Pointer) - 기초  (2) 2011.05.13
프로그래밍 시 유의사항 (팁)  (2) 2011.05.13
Comments