Automotive/C

[C/C++] Pointer 및 Const

코딩쪼앙 2024. 7. 24. 15:54

Pointer 란?

메모리의 주소값을 저장하는 변수로 주소의 시작 주소 1바이트만을 가리킴 -> int(4 Byte)의 포인터도 1Byte

아래와 같이 사용한다.

타입 * 포인터변수;
int a = 10;
int* p = &a;

Pointer 연산자

1.주소 연산자 &
2.참조 연산자 *

Const 란?

변수를 상수 취급 하게 만들며, 이렇게 const를 사용하여 상수화 된 변수는 변경이 불가능하다.  상수 또는 const 상수 라고도 하며, 이는 포인터에서도 동일하게 사용할 수 있고, 위치에 따라 의미를 다르게 사용할 수 있다. 선언할 때 동시에 값을 지정해야하며, 이후에는 수정 불가하다.

 

Const를 사용하는 이유

주로 변수의 초기값을 수정하지 않아야 할 때 값을 고정하기 위해 사용

 

Const 사용 방법

int a = 10;

const int* ptr1 = &a; // 상수에 대한 포인터
int* const ptr2 = &a; // 상수포인터
const int const *ptr3 = &a; // 상수에 대한 상수 포인터

 

상수에 대한 포인터

  • 주소는 변수이므로 변경가능
  • 저장하고 있는 값은 상수이므로 변경 불가
#include <stdio.h>
int main() {
    int a = 10;
    int b = 20;

    // 상수에 대한 포인터 -> 주소 변경 가능하나, 값은 변경 불가하다

    // 주소 변경 가능
    const int* ptr1 = &a;
    printf("%p\n",ptr1);
    ptr1 = &b;
    printf("%p\n",ptr1);

    *ptr1 = 30; // 값 변경 불가
}

상수 포인터

  • 포인터가 상수이므로 주소 변경 불가
  • 가리키는 주소가 가진 값은 변경 가능
#include <stdio.h>
int main() {
    int a = 10;
    int b = 20;

    // 상수 포인터 => 주소 변경 불가 값 변경 가능
    // 값 변경 가능
    int* const ptr1 = &a;
    printf("%d\n",*ptr1);
    *ptr1 = b;
    printf("%d\n",*ptr1);

    // 주소 변경 불가
    ptr1 = &b;
}

 

상수에 대한 상수 포인터

  • 주소 변경 불가
  • 값 변경 불가
#include <stdio.h>
int main() {
    int a = 10;
    int b = 20;

    // 상수에 대한 상수포인터
    const int* const ptr1 = &a;
    ptr1 = &b; // 주소 변경 불가
    *ptr1 = b; // 값 변경 불가

}

 

'Automotive > C' 카테고리의 다른 글

[C/C++] 포인터 배열 및 복잡한 함수 포인터  (7) 2024.09.10
[C/C++] 문자열 포인터  (2) 2024.07.26