직접 메모리를 다룰 수 있다.
*(int*)(&A) = 0x12;
노란 색 부분은 &A 가 주소라고 컴파일러에게 알려준다.
#include<stdio.h>
int main()
{
float A = 3.25;
printf("%p", &A);
*(char*)(&A) = 0x12;
*(float*)(&A) = 0x12;
*(int*)(&A) = 0x12;
return 0;
}
A 값에 IEEE 방식으로 float 이 저장 되어 있다.
A 주소에 0x12 데이터 를 넣고 싶다면
char 는 1byte 를 의미 하기 때문에
컴파일러에게 &A 주소는 char 형 point 라고 알려 준다면 1byte 값에다가 값을 넣어준다.
A 주소에 12가 들어간 모습 을 알수 있다.
compiler 는 A 를 float 형태로 알고 있기 때문에 조사식에서는 IEEE 방식으로 컬파일 한 3.250000429 가 출력 되고 있다.
마찬 가지로 &A 를 int*형 이라고 한다면 4byte 값이 거꾸로 들어 갈것이다.
4 byte 값이 모두 바뀐것을 확일 할수 있다 .
조사식에서는 float 으로 해석 하기 때문에 2.522e ~ 이런 값이 출력된다.
결론:
메모리에는 값만이 들어간다.
메모리가 float 인지 int 인지는 compiler 에 저장 되어 있어서 어떻게 읽을 것인지를 정의한다.
'공부,일 > c언어' 카테고리의 다른 글
sizeof 와 포인터 & 배열의 data type (0) | 2021.06.01 |
---|---|
void pointer , malloc (0) | 2021.06.01 |
Code 영역 (0) | 2021.05.31 |
배열&문자열 함수 (0) | 2021.05.30 |
포인터 (0) | 2021.05.24 |
댓글