포인터의 값 증가 : sizeof * 4
32bit Com → 주소 값 : 4바이트 변수 사용
64bit Com → 주소 값 : 8바이트 변수 사용
주소값 컨덱스트
scope3.c
#include <stdio.h>
int j = 42; // j is a global variable
void func3() {
int i = 11, j = 999; // here, j is a local variable of func3()
printf("\\t\\t\\t[in func3] i @ 0x%08x = %d\\n", &i, i);
printf("\\t\\t\\t[in func3] j @ 0x%08x = %d\\n", &j, j);
}
void func2() {
int i = 7;
printf("\\t\\t[in func2] i @ 0x%08x = %d\\n", &i, i);
printf("\\t\\t[in func2] j @ 0x%08x = %d\\n", &j, j);
printf("\\t\\t[in func2] setting j = 1337\\n");
j = 1337; // writing to j
func3();
printf("\\t\\t[back in func2] i @ 0x%08x = %d\\n", &i, i);
printf("\\t\\t[back in func2] j @ 0x%08x = %d\\n", &j, j);
}
void func1() {
int i = 5;
printf("\\t[in func1] i @ 0x%08x = %d\\n", &i, i);
printf("\\t[in func1] j @ 0x%08x = %d\\n", &j, j);
func2();
printf("\\t[back in func1] i @ 0x%08x = %d\\n", &i, i);
printf("\\t[back in func1] j @ 0x%08x = %d\\n", &j, j);
}
int main() {
int i = 3;
printf("[in main] i @ 0x%08x = %d\\n", &i, i);
printf("[in main] j @ 0x%08x = %d\\n", &j, j);
func1();
printf("[back in main] i @ 0x%08x = %d\\n", &i, i);
printf("[back in main] j @ 0x%08x = %d\\n", &j, j);
}

실행 gdb 명령어 : li1, b7, bt
→ 스택 구조 : main - func1 - func2
b7 : break func3 → 따라서 func1 주소값, func2 주소값 존재 O