* const
- const가 붙은 변수는 상수로 처리됩니다.
1. const *
#include <iostream>
int main()
{
int i = 6;
const int *A = &i;
(*A)++; //불가능, 컴파일 에러
printf("%d", *A);
return 0;
}
- const *는 포인터 접근을 통한 값의 수정을 막습니다.
- 즉, A의 포인터 값은 변경 가능하지만, A가 가리키는 데이터를 바꿀 수 없습니다.
#include <iostream>
int main()
{
const int *A = new int(5);
printf("%d\n", *A); //5
A = new int(7);
printf("%d", *A); //7
return 0;
}
- 예를 들어, 위와 같은 코드는 멀쩡히 동작합니다. 왜냐하면, 주소는 A가 가리키는 주소는 변경이 가능하기 때문입니다.
- int const *도 동일합니다.
#include <iostream>
int main()
{
int * const A = new int(5);
printf("%d\n", *A); //5
*A = 7;
printf("%d", *A); //7
A = new int(7); //불가능
printf("%d", *A);
return 0;
}
- int * const는 포인터에 const를 걸어준 형태입니다.
- int 값은 수정되지만, 가리키는 주소 변경이 불가능합니다.
#include <iostream>
int main()
{
int const * const A = new int(5);
printf("%d\n", *A); //5
*A = 7; //불가능
printf("%d", *A);
A = new int(7); //불가능
printf("%d", *A);
return 0;
}
- 따라서 위와 같은 형태도 가능합니다.
* 함수 포인터
#include <iostream>
double d_func(double const& d)
{
return d;
}
void func(double (&InFunc)(double const&))
{
printf("%lf\n", InFunc(5.0f));
}
int main()
{
func(d_func); //5.0000
double (*pf)(double const&) = d_func;
func(*pf); //5.0000
return 0;
}
- 자료형 (*변수명)(매개변수) = 함수명; 으로 선언 가능합니다.
- 함수의 포인터를 전달할 수 있습니다.
'공부 및 정리 > C++' 카테고리의 다른 글
C++의 기초 - 6 (0) | 2022.12.12 |
---|---|
C++의 기초 - 5 (0) | 2022.12.12 |
C++의 기초 - 3 (0) | 2022.07.12 |
C++의 기초 - 2 (0) | 2022.06.15 |
C++의 기초 - 1 (0) | 2022.06.12 |