1 minute read

포인터 타입이 있는 이유

#include <bits/stdc++.h> 
#define ll long long
using namespace std;


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int a = 1025;
    int* p = &a;
    printf("int size = %d\n", sizeof(int));
    printf("주소 = %d, 값 = %d\n", p ,*p);
    char* cp;
    cp = (char*)p; //캐스팅을 해줘야 함
    printf("char size = %d\n", sizeof(char));
    printf("주소 = %d, 값 = %d\n", cp, *cp); //실행시 주소는 같으나 값이 1로 나옴
    //1025 = 00000000 00000000 00000100 00000001
    return 0;
}

char타입이 1바이트만 읽어 00000001만 읽었기에 값이 1이 나온다.

포인터 연살

#include <bits/stdc++.h> 
#define ll long long
using namespace std;


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int a = 1025;
    int* p = &a;
    printf("int size = %d\n", sizeof(int));
    printf("주소 = %d, 값 = %d\n", p ,*p);
    char* cp;
    cp = (char*)p; //캐스팅을 해줘야 함
    printf("char size = %d\n", sizeof(char));
    printf("주소 = %d, 값 = %d\n", cp + 1, *(cp + 1)); //주소 + 1 값은 4가 나옴
    //1025=00000000 00000000 00000100 00000001
    return 0;
}

char형 포인터이기에 +1을 하면 1바이트 만큼 이동하여 값을 읽기에 00000100 즉 4가 나온다.

*(pointer + n)

이렇게 사용해야 한다.

보이드 포인터

#include <bits/stdc++.h> 
#define ll long long
using namespace std;


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int a = 1025;
    int* p = &a;
    printf("int size = %d\n", sizeof(int));
    printf("주소 = %d, 값 = %d\n", p ,*p);
    void* vp;
    vp = p; //캐스팅이 필요 없음
    printf("주소 %d, 값 %d", vp, *vp); //에러가 뜸, 주소만 가능, 포인터 연산 또한 불가능
    return 0;
}

Leave a comment