💡 컴파일은 Visual C++ 6.0 버전을 사용하였다.
심볼 테이블과 변수 x의 메모리 할당.
x = 25;
변수 x를 초기화 시킴으로 변수의 메모리주소 값은 아래와같다.
변수 초기화 후의 메모리
💡 Debug 모드는 원하는 지점에 F9키로 break 포이트를 찍고 F5키로 진입한다.
&
)를 붙여 변수이름을 입력하면 주소값이 출력된다.
메모리 옵션 경로
iNum
에 16진수로 12345678 값을 초기화 했을 때
위 그림은 iNum
에 16진수로 12345678 값을 초기화 했을때
iNum = 0x12345678;
주소에는 1byte씩 묶어 숫자를 뒤집어서 저장한다. (intel cpu 는 계산을 빨리 하기위해 숫자를 뒤집어서 주소에 입력)
즉 intel cpu는 little Endian 방식을 따르고있다.
💡 계산은 숫자의 뒤에서 하면 빠르다는 것을 이용한다.
💡 Tip ? "xV4."는 "78 56 34 12"의 아스키코드의 값이다.
little Endian 방식에 대한설명은 앞장에서 설명되어 있습니다.
printf
로 주소값 출력 방법
결과 : %p
와 변수에 엔퍼센트(&
) 를 이용해 출력가능
🔔 예) 포인터 변수의 선언과 사용을 보여주는 프로그램
*xp
는 포인트형 임을 뜻한다.unsigned int
형으로 생각하면된다. (★★★★★)*
의 갯수의 제한은 없다.
💡 위 메모리주소는 Windows OS PC에 똑같은 값이 적용된다. 이는 가상메모리에 속하기 때문이다.
💡 Tip ?
출력문에서 * : 단항 →포인터
출력문에서 * : 다항 →곱셈
결과 : *xp = &x;(직접참조)
x의 주소에 저장된x = 7;
에서 '7'값을 *xp(간접참조)
로 출력한다.
🔔 예) 변수 선언 없이 8을 12FF7C 라는 주소에 대입할 때
*((int *)0x12FF7C) = 8;
🔔 예) 변수 type에 따른 출력값의 용량
int *ip
변수 선언에서 int
는 간접참조할 값을 int
형 으로 받아 들인다. 즉, float
, char
등 다른 형이 올 수 있다는것.
결과 : float
은 메모리 저장방식 자체가 다르므로 오류값.
🔔 예) warning 메시지 없애는 방법
결과 : warning 메시지 해결
C언어 강좌 (포인터 함수 구성/hexa view) (0) | 2016.09.07 |
---|---|
C언어 강좌 (컴파일 에러 종류/ 포인터/IEE754 표준 방식) (0) | 2016.09.07 |
C언어 강좌(switch/while/for문/cl 파일생성) (0) | 2016.09.06 |
C언어 Linux강좌(switch문/리눅스 명령어/getchar-putchar/반복문 while) (0) | 2016.09.06 |
C언어 강좌(제어문/if) (0) | 2016.09.06 |