본문 바로가기

컴퓨터/언어,프로그래밍

[C/C++] const와 static의 의미!!

const - [기본적으로] 무엇이든 상수화 시켜준다!   

int ar[5]={1,2,3,4,5};

 

const int *ptr=&ar[0]; //int를 고정(값 변경 불가 주소 변경 가능)
pi2++;                // 포인터가 다른 대상체를 가리킬 수 있다.
*pi2=0;               // 에러 : 대상체가 상수이므로 값을 변경할 수 없다.
 
int * const ptr=&ar[0];//ptr(포인터)를 고정(값 변경 가능. 주소 변경 불가)
pi3++;                // 에러 : 포인터가 다른 대상체를 가리킬 수 없다.
*pi3=0;               // 대상체의 값을 변경할 수 있다.
 
const int * const ptr=&ar[0];//int와 ptr을 고정(값 변경 불가 주소 변경 불가)
pi4++;                // 에러 : 포인터가 다른 대상체를 가리킬 수 없다.
*pi4=0;               // 에러 : 대상체가 상수이므로 변경할 수 없다.

 

 

[ 요약, 정리]

1. const는 자신의 오른쪽 것에 적용된다.

2. 오른쪽에 적용대상이 없으면 왼쪽에 적용한다.

 

여기서 말하는 적용대상이란 * 또는 형(type)임.

 

 

------------------------------------------------------------------------------

 

2) static (정적변수)

 

    - 블럭 안에서만 유효한 값을 가지지만 자동변수와 같이 없어지지 않고 블럭으로 다시

      돌아왔을 때 이전 값을 다시 이용 가능

    - 초기화를 생략하면 0으로 자동 초기화

    - 힙(Heap)에 메모리 할당

    - 선언된 위치에 따라 다음과 같이 구분됨

        . 내부정적변수 : 함수 내부에서 선언되며, 함수 내부에서만 사용이 가능. 하지만,

                                       프로그램이 실행되는 동안 존재

        . 외부정적변수 : 함수 외부에서 선언되며, 다른 소스파일에서는 참조할 수 없음

 

== 정리하면

 

static은 함수 또는 파일에서 값을 보존할 필요가 있을 때(예를 들어 어떤 함수를 몇 번 호출했는지 알고 싶을 때 static 변수로 하나 선언해서 호출될 때마다 1씩 더해주면 Counter를 쉽게 만들 수 있습니다) 사용됨.



 

제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...