모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 오유인페이지
    개인차단 상태
    mmany147님의
    개인페이지입니다
    가입 : 14-01-17
    방문 : 124회
    닉네임변경 이력
    회원차단
    회원차단해제
    게시물ID : programmer_1128
    작성자 : 사쿠라
    추천 : 1
    조회수 : 1996
    IP : 218.232.***.46
    댓글 : 1개
    등록시간 : 2014/02/10 11:45:16
    http://todayhumor.com/?programmer_1128 모바일
    포인터를 확인해봅시다
    #include stdio.h
    #include conio.h // _getch(); 를 사용하기 위하여

    /*
     a라는 변수를 선언하면 프로그램은 메모리의 4바이트 공간을 a라는 이름으로 사용합니다.
     전역변수의 경우 미리 정해놓은 영역, 지역변수의 경우 함수 또는 해당 블럭이 실행되는 동안
     스택에 잠시 할당받은 공간을 이용하지만 모든 것은 중요하지 않습니다.
     결a는 메모리의 공간이기 때문입니다.

     본문에 사용되는 LPBYTE 는 BYTE *, unsigned char * 와 같습니다.
     (LPBYTE) 는 (BYTE *) 또는 (unsigned char *) 로 바꾸셔도 된다는 말입니다.
    */

    int main(int argc, char *argv[])
    {
    // a라는 공간 안에 1 이라는 값을 대입합니다.
    int a = 1;
    // 잘 들어갔는지 확인해봅니다.
    printf("%d\n", a);
    /*
     여기서 포인터를 사용하기 위해서 알아두셔야할 부분이 있습니다.
     컴퓨터는 메모리에 값을 거꾸로 저장합니다.
     int는 4바이트지만 1을 저장하면 즉 00 00 00 01 이지만 01, 00, 00, 00 으로 저장이 됩니다.
    */

    // int 는 4바이트라서 +1 을 하면 주소를 4바이트만큼 더합니다.
    printf("%x %x %x %x\n", &a, ((LPBYTE)(&a)+1), ((LPBYTE)(&a)+2), ((LPBYTE)(&a)+3));
    // 변수의 값을 1바이트씩 확인해봅시다.  a의 4바이트를 1바이트씩 보려면 &(a) 의 앞에 (unsigned char *) 를 붙여야합니다
    // 그래야 주소가 1바이트씩 더해집니다. ( 주소의 더하기는 변수의 형태를 따릅니다, int는 4바이트라서 4씩 더해집니다 )
    printf("%2d %2d %2d %2d\n", *(LPBYTE)(&a), *(LPBYTE)((LPBYTE)(&a)+1), *(LPBYTE)((LPBYTE)(&a)+2), *(LPBYTE)((LPBYTE)(&a)+3));

    // *는 값, &는 주소입니다.
    *(int *)(&a) = 2;
    /*
    이것을 직역하면 아래와 같습니다.
    값을수정하자(int 형태의 값)(a의 주소) = 2; <==========
    a주소의 값을 2로 수정하자
    int는 4바이트 입니다. int 형태의 값 이라는것은 4바이트만큼을 수정하겠다는 의미입니다.
    확인해봅시다.
    */
    printf("%x %x %x %x\n", &a, ((LPBYTE)(&a)+1), ((LPBYTE)(&a)+2), ((LPBYTE)(&a)+3));
    printf("%2d %2d %2d %2d\n", *(LPBYTE)(&a), *(LPBYTE)((LPBYTE)(&a)+1), *(LPBYTE)((LPBYTE)(&a)+2), *(LPBYTE)((LPBYTE)(&a)+3));
    /*
    응용하면 *(unsigned char *)(&a) = 3; 로 사용할수도 있습니다.
    주소 a의 값을 1바이트만큼 3으로 바꾸겠다는 내용입니다.
    확인해봅시다.
    */
    *(LPBYTE)(&a) = 3;
    printf("%x %x %x %x\n", &a, ((LPBYTE)(&a)+1), ((LPBYTE)(&a)+2), ((LPBYTE)(&a)+3));
    printf("%2d %2d %2d %2d\n", *(LPBYTE)(&a), *(LPBYTE)((LPBYTE)(&a)+1), *(LPBYTE)((LPBYTE)(&a)+2), *(LPBYTE)((LPBYTE)(&a)+3));

    /*
    이번에는 a 주소에 +1한 주소의 값을 1바이트만큼 4로 수정해봅시다.
    그리고 결과를 확인합니다. 아마 잘 수정되었을겁니다
    */
    *(LPBYTE)((LPBYTE)(&a)+1) = 4;
    printf("%x %x %x %x\n", &a, ((LPBYTE)(&a)+1), ((LPBYTE)(&a)+2), ((LPBYTE)(&a)+3));
    printf("%2d %2d %2d %2d\n", *(LPBYTE)(&a), *(LPBYTE)((LPBYTE)(&a)+1), *(LPBYTE)((LPBYTE)(&a)+2), *(LPBYTE)((LPBYTE)(&a)+3));

    _getch();
    return 0;
    }


    여기에 코딩하며 컴파일은 해보지 않았습니다 에러 있으면 알려주시고 고칠 부분이 있다거나
    설명이 필요한 부분이 있으면 말씀해주세요
    이것을 이해하고 응용할수 있다면 1차원적 포인터는 마스터입니다.


    이 게시물을 추천한 분들의 목록입니다.
    [1] 2014/02/11 02:00:55  70.197.***.95  오늩의유머  261411
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    포인터를 확인해봅시다 [1] 사쿠라 14/02/10 11:45 39 0
    2
    do while 문의 또 다른 용도 사쿠라 14/02/10 00:12 32 0
    1
    민아 사쿠라 14/01/17 19:12 15 0
    [1]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈