포인터의 연산
283
작성한 질문수 1
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;
}
포인터 문자열 할당시 +1해주는 이유
0
673
1
null 문자가 포함되면 왜 뒤에 불필요한 것들이 사라지나요?
0
565
1
강의 중 궁금한게 있습니다.
0
406
0
포인터 연산 강의
0
374
1
강의중 궁금한 내용이 있습니다
2
492
3
(int*)이 어떤 원리인건지 잘 이해가 안되요 ㅜ
1
458
0
char형과 char 배열을 차이점이 뭔가요
0
390
0
오토를 맹신하지 말라는 것이 무슨 뜻인가요?
0
335
1
안녕하세요 class의 멤버함수에 관련하여 질문이 있습니다.
0
248
0
강의 잘 듣고있습니다. 그런데 소스코드에 오타가 있는듯합니다.
1
334
0
포인터를 증가시키거나 감소시킨 상태에서는 delete 사용이 불가능한가요?
0
460
0
const float PI =3.14159265; 로 선언하고 원의 넓이를 구할 때 궁금한 것이 있습니다.
0
663
1
iosteam 헤더 파일 중복
0
365
1
함수 뒤 세미콜론
0
321
0
함수는 원본이 아닌 복사본을 사용한다는 말에 대해서 질문있습니다
0
244
0
sizeof arr에서
0
418
3
포인터를 이용한 주소값이 이상합니다
0
290
1
바이트와 관련하여서 질문이 있습니다
0
263
1
출력이 안되요
0
280
0
마지막에 main.cpp 에서
1
264
0
예제코드 오타 있어요
1
205
0
함수의 대괄호 뒤에 ; 가 붙는것과 안뭍는것의 차이가 뭔가요?
0
222
0
new/delete 연산자
1
259
1
컴파일에러
1
282
1





