#include <stdio.h>
int main(){
int a;
int *pa;
pa = &a;
*pa = 10;
printf("포인터로 a값 출력 : %d\\n", *pa);
printf("변수명으로 a값 출력 : %d\\n",a);
return 0;
}
printf는 변수의 주소가 아니라 변수의 값을 필요로 하므로 이런식으로 접근한다.
반면 scanf는 변수의 값이 아니라 변수의 주소를 필요로 하므로 이런식으로 한다.
scanf("%d",&a);
scanf("%d",pa);
const를 사용한 포인터
const를 사용하면 포인터가 가르키는 변수의 값을 바꿀 수 없다는 것이다.
#include <stdio.h>
int main(){
int a=10, b=20;
const int *pa = &a;
printf("변수 a 값 : %d\\n",*pa);
pa=&b;
printf("변수 b 값 : %d\\n",*pa);
pa=&a;
a=20;
printf("변수 a 값 : %d\\n",*pa);
return 0;
}
일반 변수에서 const는 상수를 만드는 것으로 한번 저장된 값을 바꿀수 없는것이다.
포인터에서 const는 가르키는 주소를 바꿀수 없는 것이 아니다!!
포인터에서 const는 간접참조해서 변수의 값을 바꾸지 못하고 읽기전용으로만 만드는것이다.
가능
a = 20;
불가능
*pa = 20;
이걸 왜사용할까?
문자열 상수를 인수로 받는 함수에서 주로 사용함. 문자열 상수는 값이 바뀌면 안되므로 매개변수로 선언된 포인터에 const를 사용함.
#include <stdio.h>
void printString(const char *str) { //받을때 const형 포인터로 받아서 인수로 받은 배열을 변경 못하게함.
// str[0] = 'H'; // ❌ 오류! (가리키는 값 변경 불가)
printf("%s\\n", str);
}
int main() {
char msg[] = "hello";
printString(msg); // 정상 동작
printString("world"); // 문자열 상수 전달 (안전)
return 0;
}
const와 자료형 3가지 경우
1 const char* p; p가 가리키는 데이터 변경 불가
| 2 | char *const p; | p가 가리키는 데이터 변경 불가 |
| 3 | const char *const p; | p가 가르키는 데이터, 주소값 둘다 변경 불가 |
'SW > C' 카테고리의 다른 글
| 11-2 버퍼를 사용하는 입력함수 (0) | 2025.03.30 |
|---|---|
| 10-1 배열과 포인터 (0) | 2025.03.30 |
| 9-2 포인터 완전정복 (0) | 2025.03.30 |
| 8-2 문자 저장하기 (0) | 2025.03.30 |
| 8-1 배열 (0) | 2025.03.30 |