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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | /* 문제의 제시에 앞서 다음의 코드를 보자. int main() { int num1=5; int *ptr1=#1; int num2=10; int *ptr2=#2; ..... } 위의 코드를 보면 ptr1과 ptr2가 각각 num1,num2를 가리키고 있다. 이 때 ptr1과 ptr2를 대상으로 다음과 같은 함수를 호출하고 나면, SwapPointer(ptr1,ptr2); ptr1과 ptr2가 가리키는 대상이 서로 바뀌도록 SwapPointer 함수를 정의해보자. */ #include <iostream> void SwapPointer(int **pptr1, int **pptr2) { int *temp = *pptr1; *pptr1 = *pptr2; *pptr2 = temp; } void SwapPointer2(int *(&rptr1), int *(&rptr2)) { int *temp = rptr1; rptr1 = rptr2; rptr2 = temp; } void SwapPointer3(int *ptr1, int *ptr2) { int *temp = ptr1; ptr1 = ptr2; ptr2 = temp; } int main() { int num1 = 5; int *ptr1 = &num1; int num2 = 10; int *ptr2 = &num2; std::cout << "ptr1 value = " << ptr1 << std::endl; std::cout << "ptr2 value = " << ptr2 << std::endl; SwapPointer(&ptr1, &ptr2); std::cout << "SwapPointer(ptr1,ptr2);" << std::endl; std::cout << "ptr1 value = " << ptr1 << std::endl; std::cout << "ptr2 value = " << ptr2 << std::endl; SwapPointer2(ptr1, ptr2); std::cout << "SwapPointer2(ptr1,ptr2);" << std::endl; std::cout << "ptr1 value = " << ptr1 << std::endl; std::cout << "ptr2 value = " << ptr2 << std::endl; return 0; } | cs |
프린이 열혈 C++ 보면서 공부중인데
문제보고 처음엔 SwapPointer3 처럼 만들고 출력했는데 가리키는 주소값이 안바뀜
생각해보니까 함수내에서만 값이 바뀌는거임 Call by Value?
그래서 더블포인터 쓰면 되겠지? 하고 더블포인터로 함수만들어봄
근데 문제에서는 SwapPointer(ptr1, ptr2); 이렇게 호출하라고 제시해줌
이뭐병하면서 답을 봤는데
void SwapPointer2(int *(&rptr1), int *(&rptr2))
참조자형 포인터를 받게되있음
근데 int *(&rptr1) 이부분이 이해가안감
포인터 ptr1을 참조해야하면 int &(*rptr1) 이나 int &*rptr 이렇게 써야하는거아님?
하면서 생각하고 있었는데 글쓰다보니까
포인터에대한 개념자체가 잘못잡혀있는거같음
int *ptr1 이렇게 코딩을하다보니까 *ptr1을 그냥 변수명처럼 생각해서 저따구로생각한건가
그냥 int*을 하나의 자료형이라 생각하고
int* ptr1을 참조하는 int* &rptr1 선언해준다 생각하면 편한거같은데
왜 저렇게생각했지 개빡머갈이네 지금 이해한게 맞나 싶기도 하고
현탐조진다 공부왜하지
int* Type 의 reference
그게 맞는건데 이상하게 이해하고있었나봄
call by reference ㄱㄱ
구름이야?