티스토리 뷰
안녕하세요, IT디자이너입니다.
포인터는 특정 메모리 위치의 값을 가리키는 변수를 뜻합니다. 의미는 정말 간단하죠? 하지만 응용을 하게된다면 끝도없이 어려워질 수 있습니다. ㅜㅜ
포인터는 초기화할 때 그리고 특정 메모리 위치의 값을 반환할 때 *(asterisk) 연산자를 사용해서 사용합니다. !!
바로 예를 들어서 설명드리도록 하겠습니다.
위 사진을 보시면은 특정 값으로 초기화된 int 데이터 타입의 변수의 주소를 포인터 변수를 초기화할 때 사용하였습니다.
즉 ptr은 num 변수의 주소를 가리키고요 *(asterisk) 연산자를 이용해서 가리키는 주소의 값을 반환하도록 하는 것입니다.
그러면 ptr만 printf() 함수로 출력하였을 때 num의 주소가 나오겠네요?
네 맞습니다. 포인터 변수의 값과 num의 주소는 동일합니다. ! ( %p는 16진수 메모리 주소를 나타내는 서식 지정자입니다. )
그렇기 때문에 *(asterisk) 연산자를 이용해서 연산하였을 때 num의 값을 반환하게 되는것입니다. !
그런데 굳이 이렇게 복잡하게 포인터를 사용하는 이유는 무엇일까요? 그 이유중 한 가지는 함수가 있습니다. !
위 사진을 보시게되면은 스왑이라는 함수를 정의해서 num1과 num2의 값을 swap하려는 코드를 작성해보았습니다. 하지만 결과로 봤을 때 전혀 스왑이 이러나지 않았죠? 그것은 함수의 매개변수 특성 때문입니다.
swap에 사용하는 매개변수는 어차피 지역변수의 특징을 가지고 있기에 main함수에 있는 변수를 직접 가져오지 못하고 그저 값만 복사하여 사용하는 것입니다.
그렇기 때문에 스왑을 한다하여도 main() 함수에 있는 값은 그대로인 것입니다. 하지만! 이것을 포인터가 해결할 수 있습니다.
매개 변수를 포인터 변수로 선언하여 swap() 함수를 사용할 때 num1과 num2의 주소를 전달받습니다. 그렇기 때문에 swap() 함수에서
직접 해당 메모리 주소의 값을 변경할 수 있는 것입니다. !
또한 위에 설명드린 포인터는 1중 포인터입니다. 1중 포인터가 있다는 것은 더블 그리고 트리플 포인터까지도 있다는 것입니다.
위 사진처럼 더블포인터는 포인터를 가리키는 포인터이며, 트리플 포인터는 더블 포인터를 가리키는 포인터라고 생각하시면 되겠습니다.
위의 1중,더블,트리플 포인터의 원리를 그림으로 설명드리자면 이렇습니다.
이러한 원리를 파악하고 생각하며 접근하시면은 조금 더 쉽게 포인터를 마스터하실 수 있게 될겁니다. !!!!
다음 포스팅에서는 제가 그전 포스팅에서 배열과 포인터가 어떻게 밀접하게 관련이 되어있는지 포스팅 하도록 하겠습니다.!!
감사합니다.!
'Language > C 언어' 카테고리의 다른 글
C언어의 꽃 "포인터" !! 포인터와 배열 그리고 함수 - 3 (0) | 2020.02.09 |
---|---|
C언어의 꽃 "포인터" !! 배열과 포인터의 관계 - 2 (0) | 2020.02.09 |
C언어의 배열 사용방법 (0) | 2020.02.09 |
C언어의 지역변수와 전역변수 static,register 변수 (0) | 2020.02.08 |
C언어의 함수 사용방법 (0) | 2020.02.08 |
- Total
- Today
- Yesterday
- C언어 #C++ #캐시hit #캐시라인 #캐시무효화
- C언어 #C++ #어셈블리어 #함수 호출 규약 #IT디자이너 #비쥬얼 스튜디오 #IT
- C언어 #IT디자이너
- C언어 #C++ #IT디자이너
- C언어 #C++ #자료구조 #알고리즘 #IT디자이너 #버블 정렬 #BubbleSort
- C언어 #스트림 #버퍼링 #표준 입출력 함수 #C++언어 #IT디자이너
- C언어 #IT디자이너 #C++언어
- C언어 #C++ #IT디자이너 #C++ 함수
- QUEUE #큐 #자료구조 #원형 큐 #Circle Queue #IT디자이너 #큐 과제 #C언어 #C++언어
- C언어 #자료구조 #C++ #연결리스트 #리스트 #알고리즘 #IT디자이너
- C언어 #C++ #switch #if #어셈블리어 #switch문 사용 이유 #IT디자이너
- C언어 #C++ #시간 함수 #타이밍 맞추기 #timer interrupt #IT디자이너
- Debug #C언어 #C++ #비쥬얼스튜디오 #Release #IT
- IT디자이너 #C언어 #C++ #IT디자이너 #코딩테스트
- IT디자이너 #QuickSort #퀵정렬 #C언어 #C++ #자료구조 #알고리즘
- C언어 #C++ #구조체 정렬 #pragma #IT디자이너
- C언어 #포인터 #IT디자이너
- 스택 #자료구조 #Stack #IT디자이너 #알고리즘 #C언어 #스택 과제 #C++
- C언어 #IT디자이너 #포인터 #배열 #포인터와 배열
- 어셈블리어 #IT디자이너 #C언어 #C++언어 #어셈블리 #어셈블러
- C언어 #C++ #어셈블리어 #IT디자이너 #비트연산자 #연산자 #C언어의 비트 연산자
- C언어 #C++ #삼각함수 #IT디자이너 #문제풀이 #2진수 #16진수 #비트 #bit #비트연산자
- IT디자이너 #C언어 #C++ #속성지정자 #기억클래스 #IT #const #static #register #volatile #extern #auto #s
- 디버그 #Debug #Release #디버그와 릴리즈 차이 #C언어 #C++언어 #어셈블리어
- C언어 #C++ #어셈블리어 #재귀함수 #IT디자이너
- C언어 #C++ #IT디자이너 #함수 #재귀 함수 #스택 #자료구조 #페인팅
- C언어 #C++ #파일 입출력 #텍스트파일 #IT디자이너
- C언어 #포인터 #배열 포인터 #포인터 배열 #함수
- C언어 #C++ #어셈블리어 #열거형 데이터타입 #IT디자이너
- C언어 #C++ #어셈블리어 #구조체 #구조체 특징 #IT디자이너
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |