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 |