강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của nawnstjs1705
nawnstjs1705

câu hỏi đã được viết

Lập trình C bắt đầu một cách quyết liệt

Con trỏ và mảng một chiều

간접 지정 증감 연산 질문 있습니다.

Đã giải quyết

Viết

·

356

·

Đã chỉnh sửa

0

포인터 간접지정 증감연산 .pngpszData의 총 5가 증가했고 (인덱스가 5개 증가) int형으로 바꾸었기 때문에 주소의 값이 5가 아닌 20이 증가한 것을 확인했습니다.

근데 Length의 값이 5가 나오는 것은 어떤 이유 때문인지 정확하게 이해가 안됩니다. 배열의 식별자는 주소 상수이기 때문에 20이 나와야 되는게 아닌가 라고 생각했습니다. 왜 5가 나오는지 잘 모르겠습니다.

pszData가 szBuffer와 5만큼 떨어져 있기 때문에 5가 나온 것입니까? 메모리에는 pszData와 szBuffer가 주소 상수값을 가지고 있고 연산한 것처럼 보이는데 왜 5가 나올까요...

c컴퓨터-구조assembly-languagevc++

Câu trả lời 2

1

포인터 간의 연산은 포인터 산술(pointer arithmetic)이라고 하는데, 이 때 컴파일러가 포인터가 가르키는 데이터의 크기를 기준으로 연산을 하게 됩니다. 즉 두 주소 사이에 int형 크기 변수가 5개 있다는 결과를 반환한 것입니다.
강의 도중에 강사님께서 *(ptr + 1) = prt[1]과 동일하다고 하셨는데, 여기서의 +1이 단순히 상수 1이 아니라, 데이터 하나의 크기만큼 이동하라는 것이라고 생각하시면 될 것 같습니다.

즉 pszData++의 연산 결과는 pszData + 1 과 같고 이는 데이터 크기를 기준으로 한칸을 이동하라는 식으로 해석하시면 됩니다~

nawnstjs1705님의 프로필 이미지
nawnstjs1705
Người đặt câu hỏi

이해 됐습니다 정말 감사합니다. 포인터에 증감 연산으로 다음 인덱스로 넘어갈 때와 마찬가지로 덧셈이나 뺄셈을 할 때도 배열의 원소 간의 거리가 결과 값으로 나오는 거군요.

포인터 변수 ptr - aList(배열)을 하게 되면 사실 상

ptr[5] - aList[0] 이라고 했을때 5-0의 값 5가 출력되는거네요. 감사합니다.

nullnull8537님의 프로필 이미지
nullnull8537
Người chia sẻ kiến thức

도와주셔서 고맙습니다. 😄

0

nullnull8537님의 프로필 이미지
nullnull8537
Người chia sẻ kiến thức

노호연님께서 적절히 답변해주셨습니다. 그 답변을 그대로 받아들이시면 되겠습니다. 😄

Hình ảnh hồ sơ của nawnstjs1705
nawnstjs1705

câu hỏi đã được viết

Đặt câu hỏi