25. const와 포인터 (3)

P4·2023년 6월 15일
0
post-thumbnail

const 포인터 사용예시

  1. 만약 어떠한 함수에서 main 함수의 값을 int test(int a) 이런식으로 a로 받아간다면?

  2. 같은 값을 a로 복사해 가는거임, 근데 만약 이 값이 너무 크거나 유일해야만하는 값이면 복사해 가는게 문제가 될 수 있음

  3. 값이 너무 크다면 굳이 함수가 끝날 때 사라질 값을 복사할 필요가 없기 때문에 이런 방식은 매우 비효율적임, 거기다 함수까지 자주 호출되면? 성능이 엄청나게 떨어질 수 있음

  4. 근데 만약 포인터로 접근해서 확인하게 시킨다면? 굳이 다른 메모리 공간에 복사할 필요없이 바로 주소로 가서 확인하면 됨

  5. 그런데 복사한 값이 아니라 원본에 접근하는거기 때문에? 원본 데이터가 바뀌어버릴 수도 있음, 그냥 데이터만 주려고 했는데 값이 바뀌면 문제가 됨

  6. 이때 int test(const int* pInt) 이런걸 사용하면 되는거임 (지금 int를 사용하는건 그냥 예시고 인자를 구조체로 받으면 엄청나게 커짐)

  7. 이렇게 쓰면 읽기전용이 된거임, good

  • 내 코드는 상관이 없지만 협업을 하며 각종 라이브러리를 갖다쓸때 주소를 요구할 수 있음, 그때 const로 받는걸 확인하거나 const로 넘겨주면 되는거임

ctrl + shift + space = 함수 원형 띄우기


근데 이렇게 받아도 바꿀 수는 있음

  • const int* a로 선언된 애를 int* test_int = (int*)a; 강제로 int 포인터로 캐스팅하면? 바꿀 수 있음, 따라서 절대적으로 못바꾸게 하는건 아님

  • *test_int = 500; 이런식으로 바꾸면 바뀌는거

  • 따라서 완전 막을 수 있는건 아니지만 제작자의 의도를 알려줄 수 있는거임, 이걸 무시하는 사람하고는 협업하면 안됨...

profile
지식을 담습니다.

0개의 댓글