아래 포인터 질문에 대해서 포인터는 다른 분들이 다들 잘 설명 하셔서 그냥 제가 사용하는 예 함 올려 보겠습니다.
먼저 const 키워드 입니다.
class User
{
protected:
int val[4];
public:
User() { val[0] = 100; }
const int* const Val() const { return val; }
};
int main()
{
User cc;
const int* const val = (int*)cc.Val(); // 이렇게
val[0] = 200; // 에러 납니다.
val = NULL; // 에러 납니다.
return 0;
}
반환 val은 읽기 만 가능합니다.
그런데 여기서 int* val = (int*)cc.Val(); 이렇게 하면 읽기/쓰기 가능합니다.
2 번 째 double pointer 입니다. 참 많은 예가 있는데요, 먼저 객체의 생성입니다.
int CreateInstance( User** pOut....)
{
if(어떤 이유에서 객체 생성이 false가 되었을 때)
*pOut = NULL;
return -1;
*pOut = new User;
return 0;
User* puser;
CreateInstance(&puser);...
이런 경우 이중 포인터가 필요하죠. 객체 생성을 실패하면 puser는 NULL 로 초기화 되겠지요.
이중 포인터가 많이 사용되는 곳 => 정렬입니다. 이 부분은 공부하시라고 남겨 놓겠습니다.