본문 바로가기
공부,일/c언어

포인터 2 메모리 직접 다루기

by fromnothing1 2021. 5. 26.

직접 메모리를 다룰 수 있다. 

*(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

댓글