Plite
전자오락 공방
Plite
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 프로젝트 (18)
      • 완성 프로젝트 (3)
      • 프로젝트 진행 내역 (15)
    • 공부 및 정리 (241)
      • 백준 코드 (222)
      • C++ (8)
      • DirectX (2)
      • Unreal Engine (6)
      • 프로그래밍 패턴 (3)
    • 기타 (12)
      • 기타 주저리 (10)
    • 게임과 취미 (1)
    • 대문 (1)

블로그 메뉴

  • 홈
  • 프로젝트
  • 취미, 일상
  • 백준 프로필

공지사항

  • [Read Me]
  • 제 블로그에 방문하신 것을 환영합니다.

인기 글

태그

  • 기하
  • 큐
  • SCC
  • 정렬
  • 백준
  • 트라이
  • 정수론
  • 구현
  • 브루트포스
  • KMP
  • 위상 정렬
  • 우선순위큐
  • 그래프
  • UC++
  • 이분탐색
  • 동적계획법
  • 투포인터
  • 트리
  • 분할정복
  • 유니온 파인드
  • 백트래킹
  • 누적합
  • 수학
  • C++
  • LCA
  • 조합론
  • 문자열
  • 스택
  • 최소 스패닝 트리
  • 세그먼트 트리

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Plite

전자오락 공방

공부 및 정리/C++

C++의 기초 - 4

2022. 11. 30. 18:57

* 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
    '공부 및 정리/C++' 카테고리의 다른 글
    • C++의 기초 - 6
    • C++의 기초 - 5
    • C++의 기초 - 3
    • C++의 기초 - 2
    Plite
    Plite
    개발 일지, 게임 이야기 등을 적어두는 공간입니다.

    티스토리툴바