#include <stdio.h> int main(void) { int n = 50; printf("%p\n", &n); // 메모리상 주소를 받기위해 '&'라는 연산자를 사용 printf("%p\n", *&n); // '*'를 사용하면 그 메모리 주소에 있는 실제값을 받음 }
#include <stdio.h> int main(void) { int n = 50; int *p = &n; // *p라는 포인터 변수에 &n(변수 n의 주소)를 저장 printf("%p\n", p); // 변수 n의 주소를 출력 printf("%i\n", *p); // 포인터 p가 가리키는 변수의 값 = n의 값 = 50 }
#include <stdio.h> int main(void) { char *s = "EMMA"; printf("%p\n", s); // E에 해당하는 메모리주소를 출력 // 첫번째문자에 해당하는 주소값을 하나씩 증가하면 바로 옆에있는 문자의 값을 출력함 printf("%c\n", *s); // E printf("%c\n", *(s+1)); // M printf("%c\n", *(s+2)); // M printf("%c\n", *(s+3)); // A }
- 메모리 안에는 데이터가 저장되는 구역이 나뉘어져 있다.
- 머신코드 영역 : 프로그램이 실행 될 때 그 프로그램이 컴파일 된 바이너리가 저장.
- 글로벌 영역 : 프로그램 안에서 저장된 전역 변수가 저장.
- 힙 영역 : malloc으로 할당된 메모리의 데이터가 저장.
- 스택 영역 : 프로그램 내의 함수와 관련된 것들이 저장.