정적변수 / 상수변수 / 레퍼런스 변수

윤이령·2026년 4월 16일

정적 변수

  • static : 지역변수를 정적변수로 바꿈
  • 선언된 블록이 끝나더라도 값을 유지
#include <iostream>
using namespace std;

void func() {
	int a = 10;
	static int b = 10;
	a++;
	b++;
	cout << "a : " << a << ", b: " << b << endl;
}
int main() {
	func(); // a = 11, b = 11
	func(); // a = 11, b = 12
	func(); // a = 11, b = 13
	func(); // a = 11, b = 14
	return 0;
}

상수 변수

  • const : 변하지 않는 값
  • const int *ptr = &a; : 포인터 변수가 가리키는 값을 상수화
    • 값 변경 X / 주소 변경 O
  • int *const ptr = &a; : 포인터 변수 자체를 상수화
    • 값 변경 O / 주소 변경 X
#include <iostream>
using namespace std;

int main(){
	int a = 0;
    const int *ptr = &a;
    
    a = 1;
    *ptr = 2; // 컴파일 오류 발생 -> 상수변수를 변경하려고 함으로
    return 0;
}

레퍼런스 변수

  • 변수에 또 다른 이름, 별칭(별명)을 부여
  • 변수 이름 앞에 & 기호로 선언
자료형 &레퍼런스_변수_이름 = 대상_변수_이름;
  • 반드시!!
    • 참조할 원본 변수를 지정
    • 참조할 대상이 지정된 레퍼런스 변수는 다른 변수를 참조하도록 변경할 수 없음 -> 한번 초기화 한 후 다른 값을 넣으면 값이 변경되는 형식
    • 상수(리터럴)를 참조할 수 없다.
#include <iostream>
using namespace std;

void swap(int &a, int &b){
	int temp = a;
    a = b;
    b = temp;
}
int main(){
  int a - 5, b - 10;
  swap(a, b);
  return 0;
}
#include <iostream>
using namespace std;

int main(){
	int a = 10;
    int &ref = a; # ref = value
    
    int b = 20;
    ref = b; # a = b가 됨 값이 변경됨
}

0개의 댓글