주소와 주소의 자료형, 포인터

문성원·2024년 1월 4일
0

1) 목표

  • 포인터를 이해하기 전 주소의 개념을 이해하기
  • 포인터 문법에 대해 간단히 익히기
  • 포인터에 대한 산술 연산과 주소 연산의 차이 이해하기

2) 소스코드

// Example03.cpp 
// 주소와 주소를 표현하는 자료형 그리고 포인터 

#include "pch.h"
#include <stdio.h>

int main()
{
    int num = 0x12345678;
    printf("num = %08X\n", num);    // 12345678
    printf("&num = %p\n", &num);    // 00AFFB00

    int temp;
    temp = num;
    temp = (int)& num;              // 00CFF8C8  
    printf("temp = %08X\n", temp);  // 00CFF8C8
    printf("&temp = %p\n", &temp);  // 00CFF8BC

    int* p = &num;                  
    printf("%d\n", *p);             // 305419896

    int test;
    test = temp;
    printf("%08X\n", test);         // 00CFF8C8

    // Memory    고 <-- 12  34  56  78 --> 저
    test = *(short*)temp;
    printf("%08X\n", test);         // 00005678
    test = *p;                      // test = (int*)p;
    printf("%08X\n", test);         // 12345678
    test = *(short*)(temp + 1);     
    printf("%08X\n", test);         // 00003456
    test = *(short*)temp + 1;       
    printf("%08X\n", test);         // 00005679(00005678 + 1)
    test = *((short*)temp + 1);     
    printf("%08X\n", test);         // 00001234

    test = *(char*)(temp + 2); // 0x34 -> 산술 연산
    test = *(char*)((short*)temp + 1); // 0x34 -> 주소 연산
    test = *((char*)p + 2); // 0x34
    printf("%08X\n", test);
    
    printf("&num = %p, temp = %08X, test = %08X\n", &num, temp, test);
    return 0;
}

3) 이해한 내용 정리

  • 변수가 아닌 변수 값을 출력하고자 할 때에는 "&"를 변수 앞에 넣는다.
  • 주소형 변수로 만들고자 할 때에는 "(자료형)* 변수" 로 표현한다.
  • 산술 연산 vs 주소 연산
// 고 <- 12 34 56 78 -> 저
int num = 0x12345678;
int test;
test = *(short*)num;	
printf("%08X\n", num);			// 00005678
test = *(short*)(num + 1);
printf("%08X\n", num);			// 00003456
test = *(short*)num + 1;
printf("%08X\n", num);			// 00005679
test = *((short*)num + 1);
printf("%08X\n", num);			// 00001234
  • 산술 연산 같은 경우 변수의 주소에 접근하여 +n만큼 이동한 다음 포인터 자료형 만큼(단위) 읽어서 값을 출력
  • 주소 연산 같은 경우 포인터의 자료형 만큼 이동하여 값을 읽어서 출력

4) 출처

해당 게시글은 김성엽 선생님의 따배씨 "주소와 주소의 자료형 그리고 포인터" 영상을 바탕으로 작성된 글입니다.

profile
EasyWin32를 통해 C언어를 공부하고 있습니다~

0개의 댓글

관련 채용 정보