반응형
const int *p; // 읽기 전용 포인터(주소 변경 가능, 값 변경 불가능)
int* const p; // 특정 변수 전용 포인터(주소 변경 불가능, 값 변경 가능)
const int* const p;
#include<stdio.h>
int main(){
int x = 10, y = 20;
const int* p1 = &x; // pointer p는 '읽기 전용 포인터'이다. 포인터를 이용해서 값을 변경할 수 없다.
// 포인터가 가리키는 주소는 변경할 수 있지만, 그 안에 저장된 값은 바꿀 수 없다.
// == (int const *p1)
printf("*p1 = %d\n", *p1);
x = 30; // 직접 변경이 가능하다.
printf("*p1 = %d\n", *p1);
// *p1 = 20; // (오류) 컴파일 에러, 포인터 변수를 이용하여 값을 변경할 수 없다.
// (*p1)++; // (오류) 포인터 변수를 이용하여 값을 변경할 수 없다.
p1 = &y; // 주소값은 바꿀 수 있다.
printf("*p1 = %d\n\n", *p1);
int* const p2 = &x; // 특정 변수 전용이다. 주소를 변경할 수 없다.
printf("*p2 = %d\n", *p2);
x = 40; // 직접 변경이 가능하다.
printf("*p2 = %d\n", *p2);
*p2 = 20; // 포인터 변수를 이용하여 저장된 값을 변경할 수 있다.
printf("*p2 = %d\n", *p2);
(*p2)++; // 포인터 변수를 이용하여 저장된 값을 변경할 수 있다, (*p2)의 값에 '+1'을 한 값이 출력된다.
// p2 = &y; // (오류) 주소값을 변경할 수 없다.
printf("*p2 = %d\n\n", *p2);
const int* const p3 = &x;
printf("*p3 = %d\n", *p3);
x = 30; // 직접 변경이 가능하다.
// *p3 = 100; // (오류) 포인터 변수를 이용하여 저장된 값을 변경할 수 없다.
// (*p3)++; // (오류) 포인터 변수를 이용하여 저장된 값을 변경할 수 없다.
// p3 = &y; // (오류) 주소 값을 변경할 수 없다.
printf("*p3 = %d\n\n", *p3);
return 0;
}
반응형
'C' 카테고리의 다른 글
[C언어] 동적 메모리 할당 (malloc, calloc) (0) | 2021.04.29 |
---|---|
[C언어] 이중 포인터 (0) | 2021.04.28 |
[C언어] 이차원 배열 (0) | 2021.04.26 |
[C언어] 포인터 배열 (0) | 2021.04.21 |
[C언어] 실습: 입력받은 다섯 개 정수의 합 출력하기 (0) | 2021.04.19 |