• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

포인터의 연산

21.02.12 11:16 작성 조회수 135

2

p3=p3+1 을 했을 때 

p3[0]이 0.5를 가리키게 되고 

p3[1]이 0.8을 가리키게 되는 원리가 잘 이해가 가지 않아요.

p3주소가 1만큼 옮겨졌단 뜻인가요?

p3에 포함된 배열들의 위치가 1씩 옆으로 옮겨졋단건가요?

답변 1

답변을 작성해보세요.

2

p3에 포함된 배열들의 위치가 1씩 옆으로 옮겨졌다는 의미입니다.

단, 보다 엄밀히 말하자면 p3는 double 데이터형이기 때문에 8byte씩 옆으로 옮겨졌다는 표현이 보다 정확합니다.

(당연히 p3의 데이터형을 int로 바꾼다면 4byte씩 옆으로 옮겨지겠죠?)

p3[0]의 주소를 ` X `라 할때, p3 배열의 주소는 아래와 같습니다.

&p3[0] = X

&p3[1] = X + 8byte

&p3[2] = X + 16byte

p3 + 1의 주소는 아래와 같습니다.

&p3[0] = X + 8byte

&p3[1] = X + 16byte

&p3[2] = X + 24byte

저희 예제 상에서,

X에는 0.2, X+8byte에는 0.5, X+16byte에는 0.8이 저장되어 있기 때문에,

연산을 하기 전 p3[0]은 0.2를 가리키게 되고, 연산을 진행한 후 에는 0.5를 가리키게 됩니다.

직접 코드를 만들어 실행해보시면 보다 쉽게 이해가 될 것 같습니다 :)

#include <iostream>

using namespace std;

int main() {

    double* p3 = new double[3];
    p3[0] = 0.2;
    p3[1] = 0.5;
    p3[2] = 0.8;

    cout << "p3[0] is " << p3[0] << " at " << &p3[0] << endl;
    cout << "p3[1] is " << p3[1] << " at " << &p3[1] << endl;
    cout << "p3[2] is " << p3[2] << " at " << &p3[2] << endl;

    p3 = p3 + 1;

    cout << "p3[0] is " << p3[0] << " at " << &p3[0] << endl;
    cout << "p3[1] is " << p3[1] << " at " << &p3[1] << endl;
    cout << "p3[2] is " << p3[2] << " at " << &p3[2] << endl;

    p3 = p3 - 1;
    delete[] p3;

    return 0;
}