728x90

 

2014.03.18 수업 ver1_0a.docx

2014. 03. 18 수업 및 과제 


1 포인터(Pointer)의 이해 

  1.1 메모리 구조

- 일반적[1 byte(8 bit) 단위 마다 주소(address)를 지정]

- &변수명 :address 지정

[예제]

#include <stdio.h>
int main()
{
  int iNum=0;
  printf("%d \n", iNum);            /* 0 */
  printf("%d \n"&iNum);          /* 1245044 */
  printf("%X \n"&iNum);          /* 12FF74 */
  printf("%08X \n"&iNum);     
/* 0012FF74   08X: 8자리 빈자리에 0입력 16진수 출력*

  printf("%p \n", &iNum);          /* 0012FF74 
%p: 포인터의 16진수 주소값 출력*/

  
return 0;
}

 

  1.2 포인터(Pointer)설명

* : 주소(단항 /캐스팅) = 캐스팅 연산자 역할 (일시적인 형변환)

* : 값(단항)

 [예제]

#include <stdio.h>
int main()
{
  int iNum = 0;
//  &iNum = 100;                       컴파일 waring C4047  &iNum   같지않다 int형 (100)  

 iNum 의 주소상수(&) 를 의미함

 

//  (int*)0x12FF74 = 100;       컴파일 waring C4047  (int *)0x12FF74 같지않다 int(100)   

                                               iNum 의 주소상수(&) 를 의미함

  *(int*)0x12FF74 = 100;       *(int*)0x12FF74 좌변은 iNum 의 변수 를 의미    
  printf("%08X \n"&iNum);

 

  printf("%d \n", iNum);

 

  *(&iNum) = 1000;                (int *)0x12FF74 = &iNum 이랑 같다.  
                                        *& 가 만나면 서로 상쇄된다.  
  printf("%08X \n"&iNum);
  printf("%d \n", iNum);
  return 0;
}

 

1.3 캐스팅 연산자

* : 곱셈(2항 )

[예제]

#include <stdio.h>
int main()
{
  int iNum=0;
  int iAddr=0;  
  int *iP;

  iAddr=(int)(&iNum);          warning error       

iAddr=&iNum;   -> 좌변은 int(정수형) 우변은 int * (정수형 주소상수) 


  printf("%08X \n", iAddr);     // 0012FF6C   &iNum 주소값

  *( (int*)iAddr )=1000;    // 1000을 iAddr 주소 포인터에 넣어라. 
  printf("%d \n", iNum);        // 1000         1000출력

  iP=&iNum;
  *iP=999;

  printf("%d \n", iNum);        // 999       

  return 0;
}

 [결과]  

 

 

1.4 point 연산자 활용

[예제]

#include <stdio.h>
int main()
{
  int   iNum=0;
  int *   iP=&iNum;
  
  printf("%d \n", iNum);       // 0             iNum 변수값
  printf("%08X \n"&iNum);   // 12FF70    iNum 자신의 주소값
  printf("%08X \n", iP);    // 12FF70       iP 변수(&iNum주소)값
  printf("%08X \n"&iP);    // 12FF74    *iP 자신의 주소값    
  printf("%d \n", *iP);    // 0              &iP 주소가 가리키는 변수(iNum)의 값

  return 0;
}

[결과]

 

 

'…™업무일지。' 카테고리의 다른 글

[smart]이재우-20140320  (0) 2014.03.20
[smart]이재우-20140319  (0) 2014.03.19
[smart]이재우-20140317  (0) 2014.03.17
[smart]이재우-20140314  (0) 2014.03.14
[smart]이재우-20140313  (0) 2014.03.13