간접 지정 증감 연산 질문 있습니다.
pszData의 총 5가 증가했고 (인덱스가 5개 증가) int형으로 바꾸었기 때문에 주소의 값이 5가 아닌 20이 증가한 것을 확인했습니다.
근데 Length의 값이 5가 나오는 것은 어떤 이유 때문인지 정확하게 이해가 안됩니다. 배열의 식별자는 주소 상수이기 때문에 20이 나와야 되는게 아닌가 라고 생각했습니다. 왜 5가 나오는지 잘 모르겠습니다.
pszData가 szBuffer와 5만큼 떨어져 있기 때문에 5가 나온 것입니까? 메모리에는 pszData와 szBuffer가 주소 상수값을 가지고 있고 연산한 것처럼 보이는데 왜 5가 나올까요...
Answer 2
1
포인터 간의 연산은 포인터 산술(pointer arithmetic)이라고 하는데, 이 때 컴파일러가 포인터가 가르키는 데이터의 크기를 기준으로 연산을 하게 됩니다. 즉 두 주소 사이에 int형 크기 변수가 5개 있다는 결과를 반환한 것입니다.
강의 도중에 강사님께서 *(ptr + 1) = prt[1]과 동일하다고 하셨는데, 여기서의 +1이 단순히 상수 1이 아니라, 데이터 하나의 크기만큼 이동하라는 것이라고 생각하시면 될 것 같습니다.
즉 pszData++의 연산 결과는 pszData + 1 과 같고 이는 데이터 크기를 기준으로 한칸을 이동하라는 식으로 해석하시면 됩니다~
0
이해 됐습니다 정말 감사합니다. 포인터에 증감 연산으로 다음 인덱스로 넘어갈 때와 마찬가지로 덧셈이나 뺄셈을 할 때도 배열의 원소 간의 거리가 결과 값으로 나오는 거군요.
포인터 변수 ptr - aList(배열)을 하게 되면 사실 상
ptr[5] - aList[0] 이라고 했을때 5-0의 값 5가 출력되는거네요. 감사합니다.
주소 연산자(&) 간접 지정자(*) 반대 개념
0
22
1
Virtual Memory, Memory, Memory mapping tables
0
42
1
샘플코드 출력 오류 발생 질문드립니다
0
59
2
값의 교환에 사용되는 변수의 위치.
0
83
2
메모리 비교에 관한 질문
0
78
2
문자열 Null
0
60
1
C, C++
0
83
2
문자열 입출력 코드 에러
0
58
2
선생님! 120화 2분 50초 질문입니다.
0
65
1
caller 가 메모리 할당 해제를 할 때의 문제점 질문
0
60
2
단축키 맞는지 여부 문의드립니다.
0
58
2
문자열을 사용하는 이중 포인터에 대하여 질문합니다
0
62
1
char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요
0
77
2
용어 설명 필요
0
55
2
stdin, stdout
0
69
2
필수 실습 (최댓값을 반환하는 함수)
0
90
2
아......ㅠㅠ
0
96
2
버퍼 내 엔터
0
69
1
2진수 뺄셈에서 carry-out
0
110
2
union 식별자는 실무에서 보통 어디에서 사용하나요?
0
76
2
필수실습문제 공부법 (진도 vs 복습)
0
100
2
예제파일 다운로드
0
73
2
Visial Studio Code 를 설치해서 사용해도 수업을 따라가는데 지장이 있나요?
0
112
3
연산자 기본이론 강의 질문
0
57
2

