카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2018/12/13

Pointer reference


1. c의 포인터
  1. -참조 연산자 (&)
  • 메모리의 변수 주소

  1. -Pinter
  • 포인터는 C 프로그램에서 메모리에 접근 하고 주소를 조작 하는 데 사용 된다.
  • 포인터 변수 또는 단순히 포인터는 데이터가 아닌 메모리 주소를 보유 하는 변수의 특별 한 자료형이다

주소 값을 보유 하는 변수를 포인터 변수 또는 단순히 포인터 라고 한다.
32bit 주소 맵의 운영체제 (2^32 = 4G Memory)

int main(void){
int a;
int *b;
return 0;
}

a 변수 메모리 주소 확인 과정
&a에 라는 메모리 상의 주소 값이 리턴 값으로 온다.

메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x1000
메모리 공간 할당
a;
변수 선언
0X1260
메모리 공간 할당 *
b=110;
주소 값 0x1500 선언

실재 값 존재
110;
메모리 공간 할당
메모리 자료형 int(32bit)
0x1500

int main(void){
int *c;
char *d;
}
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x2000
메모리 공간 할당 *
c;
주소 값 0x2000 선언
0X3000
메모리 공간 할당 *
d;
주소 값 0x3000 선언


실재 값 존재
int
메모리 공간 할당
메모리 자료형 int(32bit)
0x2000 위치

실재 값 존재
char
메모리 공간 할당
메모리 자료형 int(32bit)
0x3000 위치


#include <stdio.h>
int main(void){
int value=10;
printf("Valueable: %d, Memory Address: %d\n", value, &value);
}
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x4000
메모리 공간 할당
value;
변수 선언
%p &value

%d value



#include <stdio.h>
int main(void){
int* point_value;
int num=100;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5000
메모리 공간 할당 *
point_value;
변수 선언
0x5200
메모리 공간 할당 100
num
변수 선언


printf("[point_value] memory_address: %ld, Content: %d\n", point_value, 
*point_value);
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5000
메모리 공간 할당
value;
변수 호출
%d *point_value

%d point_value
결과



printf("[num] memory_address: %p, Value: %d\n\n", &num, num);
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200
메모리 공간 할당
value;
변수 호출
%p &num

%d num
결과


point_value=&num;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200<-&num
0x5200=100;
메모리 공간 할당 *
point_value;
0x5000
변수 선언



printf("[point_value] memory_address: %ld, Content: %d\n\n", point_value, *point_value);
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200
메모리 공간 할당 *
point_value
변수 호출
%ld *point_value 20

&num = 0x5200
결과



num=90;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200
메모리 공간 할당 90
num
변수 선언


printf("[point_value] memory_address: %ld, Content: %d\n\n", point_value, *point_value);
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200
메모리 공간 할당
point_value
변수 호출
%ld *point_value 11

num = 0x5200
결과


*point_value=30;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200=30
메모리 공간 할당 *
point_value=30
변수 선언


printf("[num] memory_address: %ld, Value: %d\n", &num, num);
return 0;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200
메모리 공간 할당
point_value
변수 호출
%ld &num

num = 30
결과
}

댓글 없음:

댓글 쓰기