C언어 \ C++/포인터 \ 배열
[C언어] 포인터의포인터(더블포인터) Swap함수 예제
안산드레아스
2022. 2. 19. 12:12
반응형
포인터에 관한해서.
https://ansan-survivor.tistory.com/1237
[C언어] 포인터란? 포인터에 대해 쉽게 이해하기. (포인터 변수 사용하기, 포인터로 값 변경하기,
(알아두기) 컴퓨터는 32비트와 64비트를 많이 사용한다. 이는 1번 처리에 사용할 수 있는 메모리의 크기이다. 만약 32비트(4byte) PC라면, 8 byte를 할당해도 저장할 수 있는 공간은 4byte 뿐이다. 나머지
ansan-survivor.tistory.com
더블포인터에 관해서.
https://ansan-survivor.tistory.com/1288
[C언어] 포인터의 포인터 (더블 포인터, 이중 포인터, 삼중 포인터) 이해하기 예제
앞서 간단하게 포인터란 무엇인지, 예제를 통해 설명. https://ansan-survivor.tistory.com/1237 [C언어] 포인터란? 포인터에 대해 쉽게 이해하기. (포인터 변수 사용하기, 포인터로 값 변경하기, (알아두기)
ansan-survivor.tistory.com
더블포인터의 swap 예제.
#include <stdio.h>
/*
더블포인터 **ptr
더블 포인터를 이용해
swapIntptr 함수 만들기.
num1 -> num2 값으로,
num2 -> num1 값으로,
*/
// 주소값의 인자를 받기 위해
// (*p1)의 자료형 int*, ptr1에 저장하기 위해서는 자료형이 같아야 한다.
void SwapIntPtr(int* * p1, int* * p2)
{
int * temp = *p1; // *p1 = ptr1 을 의미, ptr1의 주소를 temp에 저장.
*p1 = *p2; // ptr2의 주소를 ptr1에 저장.
*p2 = temp; // *p2 = ptr2 이고, ptr2의 자료형은 (int *) 이므로 temp의 자료형과 같아서 대입 가능.
}
int main()
{
int num1 = 10, num2 = 20;
int * ptr1 = NULL;
int * ptr2 = NULL; // 포인터 초기화
ptr1 = &num1, ptr2 = &num2;
SwapIntPtr(&ptr1, &ptr2); // 함수를 통해 값을 변경하려면, 그 주소값을 인자로 전달해야함.
/*
즉, p1 -> ptr1 -> num1 을 가리키고,
p2 -> ptr2 -> num2 를 가리킴.
*/
printf("num1: %d\n num2: %d \n", *ptr1, *ptr2);
return 0;
}
반응형
(결과)
반응형