배열과 포인터의 관계 공부하는중임
대괄호 연산에 대해 궁금한게있는데
내가 배운 바에 의하면 arr[3] = *(arr + 3)
이런 식으로 변환되어 포인터 연산을 하는 것 까진 이해됨
이차원 배열의 경우도 생각보는 문제가 나와서 걍 다항식 전개하듯
arr[3][3] = *(*(arr + 2) + 2) 라고 했지
그리고 그게 정답 맞았음
근데 헷갈리는건 * ← Asterisk 이새기는 해당 주소의 값을 의미하는거잫아
그러면 *(*(arr + 2) + 2) 여기서 맨 안쪽 괄호 (arr + 2) 포인터 덧셈을 수행하고
애스터리스크로 그 값을 반환하겠지 *(arr + 2)니까
근데 그러고 나면 '값'이 반환되었으므로(애스터리스크 썼으니까)
큰 소괄호에는 포인터 연산이 아닌 단순 덧셈이 수행되야 하는거 아님?
더이상 arr라는 배열의 초기값을 지정하는 포인터가 사라졌으니까
즉, *((arr + 2) + 2) 가 되어야 정답이 되는거 아니냐
왜 *(*(arr + 2) + 2)가 정답인 거지
글이 좀 길어서 못알아들을 수도 있겠는데
혹시 댓글 달아주면 최대한 잘 설명해볼게 답변 부탁함 고수님들아
해당 댓글은 삭제되었습니다.
아시발
맞네
ㄳㄳ
*(arr+1) 가 arr[1]면 *(*(arr+1)+2)는 *(arr[1]+2) 겠지 그럼 arr[1][2] 랑 같아지겠지 그러면 *(arr+0) 가 arr[0]면 *(*(arr+1)+2)는 *(arr[1]+2) 겠지 그럼 arr[1][2] 랑 같아지겠지
무조건 해당 주소의 값을 주는게 아니긴 함. 위 예에서는 int[][3] -> int[] -> int 이렇게ㅇㅅㅇ