안녕하세요 ! 초보개발자 입니다.
이 블로그는 개인 공부 정리용 블로그 입니다.
혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.
그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.
그럼 시작하도록 하겠습니다.
1.포인터(4)
1) 포인터의 형변환
포인터도 앞에 강의에서 말한 것 처럼 변수이기 때문에 형 변환이 가능 합니다. 변수와 같이 자동 형변환과 강제 형변환이 가능 합니다.
예를 들면 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 | #include<stdio.h> int main(void) { int i; double *ptr = &i; return 0; } | cs |
int 형 변수의 주소값을 double형으로 자동 형변환이 됩니다. 변수에서 자동 형변환 되던 것과 같습니다.
강제 형변환도 마찬가지 입니다. 위의 예제를 바꾸어 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 | #include<stdio.h> int main(void) { int i; double *ptr =(double *) &i; return 0; } | cs |
변수에서는 (double)로 강제 형변환을 하였습니다. 하지만 포인터에서는 다릅니다. ptr이 포인터 변수이기 때문에 (double *)을 해주어야 합니다.
포인터 변수를 강제로 형변환 해줄 때는 *연산자를 붙여 주어야 한다는 것만 주의해 주시면 되겠습니다.
2) 상수 포인터
포인터가 가르키는 대상이 상수 일 경우 포인터의 타입에도 const가 포함 되어야 합니다. 이를 가리켜 상수 포인터라고 합니다.
1 2 3 4 5 6 7 8 9 | #include<stdio.h> int main(void) { const int MAX = 999; const int *ptr = &MAX; return 0; } | cs |
여기서 포인터가 가르키는 대상이 상수 이므로 *ptr의 값을 바꿀수는 없습니다.
3) 포인터 상수
포인터를 상수로 선언 하는 것도 가능 합니다. 포인터의 이름 앞에 const만 붙이면 됩니다.
1 2 3 4 5 6 7 8 9 | #include<stdio.h> int main(void) { int i = 1; int * const ptr = &i; return 0; } | cs |
포인터가 상수이면 포인터에 저장된 주소를 변경할 수 없으므로 포인터가 다른 대상을 가르킬 수 없습니다.
'프로그래밍 > C언어' 카테고리의 다른 글
[C언어] 포인터(6) -[] 연산자 (1) | 2017.04.28 |
---|---|
[C언어] 포인터(5) - 포인터의 연산 (2) | 2017.04.26 |
[C언어] 포인터(3) - 포인터와 배열 (0) | 2017.04.23 |
[C언어] 포인터(2) - 포인터의 형변환 (3) | 2017.04.23 |
[C언어] 포인터(1) - 포인터란 ? (1) | 2017.04.20 |