1
2
3
4
5
6
7
8
9
10
11
12
|
#include <stdio.h>
int main() {
double num2 = 3.14;
int * ptr2 = &num2;
*ptr2 = 10;
}
|
cs |
여기에서 변수 num2가 더블형인데, num2를 가리키는 포인터 변수 자료형을 int라고 설정해놓으면,
포인터는 자기가 가리키는 변수가 원래 더블형이라 8바이트 임에도, 정수형으로 인식하여 4바이트로 num2 변수에 데이터 값 10을 메모리에 다시 저장하게 된다.
그러면 8바이트 짜리로 메모리에 저장되어 있던 값에 정수형 4바이트 짜리로 저장하게 되니(4바이트 짜리로 알고 메모리에 접근하게 되니) 앞의 4바이트는 10이라는 정수값이 채워지고, 기존의 8바이트 짜리 메모리의 뒤 4바이트는 3.14의 흔적이 남아있게 된다.
그렇다면, num2은 의도하는 정확한 값일 수 없게 된다.
다시 말해, 포인터 변수의 자료형은 포인터 변수에 관한 것이 아니라, 포인터 변수가 가리키고 있는 변수의 자료형을 나타내는 것이다.
또한, 포인터의 자료형을 통하여 변수(의 메모리)에 접근(* 연산자)하는 방식
(1바이트인지, 2바이트인지, 4바이트인지, 8바이트인지)을 결정하게 해준다.
'컴퓨터 사이언스 > C언어' 카테고리의 다른 글
[C언어] 포인터가 가리키는 메모리를 참조하는 * 연산자 예제 (0) | 2020.08.10 |
---|---|
[C언어] & 연산자 (Ampersand, 앰퍼샌드) (0) | 2020.08.09 |
[C언어] 포인터 변수에 있어 자료형의 의미 1 (0) | 2020.08.09 |
[C언어] 포인터 변수 선언하기(C pointer) (0) | 2020.08.09 |
[C언어] * 연산자(별표 기호, Asterisk 연산자)에 대하여: 곱하기, 포인터 변수 선언, 메모리로의 접근 (2) | 2020.08.09 |