본문 바로가기
C++

6-4. 포인터 연산, 배열 인덱싱

by kwon5346 2024. 2. 20.
반응형

포인터 연산

#include <iostream>

using namespace std;

int main()
{
    int value = 7;
    int *ptr = &value;

    cout << uintptr_t(ptr - 1) << endl;
    cout << uintptr_t(ptr) << endl;
    cout << uintptr_t(ptr + 1) << endl;
    cout << uintptr_t(ptr + 2) << endl;

    return 0;
}
6100644356
6100644360
6100644364
6100644368

지금까지 포인터 주소값을 16진수에서 10진수로 캐스팅하기 위해 (int)ptr같은 방식으로 캐스팅을 하였는데,
uintptr_t(ptr)을 사용하는게 좋다. 또한 포인터는 주소를 저장하는 변수인데 왜 앞에 자료형을 적어주느냐 하였을때 de-referencing 할 때 어떤 타입으로 가져오느냐가 지금까지 알던 내용이었고,
두번째 이유로 포인터 연산을 했을때 몇 바이트씩 이동할지 알아야 하기 때문이다. 위 코드에선 int자료형은 4바이트기 때문에 포인터 연산 한번마다 4씩 변화하고, 만약 double자료형으로 바꾼다면 8바이트씩 변할 것이다.


배열 인덱싱

#include <iostream>

using namespace std;

int main()
{
    char name[] = "sugang sinchung";
    int num_name = sizeof(name) / sizeof(char);

    for (int i = 0; i < num_name; i++)
    {
        cout << *(name + i);
    }
    cout << endl;

    return 0;
}
sugang sinchung

배열도 포인터이기 때문에 포인터 연산으로 출력이 가능하다.

#include <iostream>

using namespace std;

int main()
{
    char name[] = "sugang sinchung";
    char *ptr = name;

    while (true)
    {
        cout << *ptr;
        ++ptr;
        if (*ptr == '\0')
        {
            break;
        }
    }
    cout << endl;

    return 0;
}

이런식으로 증감연산자를 이용할 수도 있다.

반응형