인프런 커뮤니티 질문&답변

Syyy님의 프로필 이미지
Syyy

작성한 질문수

홍정모의 따라하며 배우는 C언어

11.7 선택 정렬 문제 풀이

배열과 포인터의 산술 연산

작성

·

370

0

안녕하세요:)

 

연습 문제 구현 중, 

swap(&arr[min_idx], &arr[i]);

이 부분을

swap(arr + min_idx, arr + i);

이렇게 구현을 해봤는데, 똑같이 작동해 확인 차 여쭤보려고 질문을 달게 되었습니다.

 

전에 포인터는 산술연산이 가능하지만, 배열은 산술연산이 안된다고 하셨는데요.

여기서 arr은 배열이지만 산술연산이 가능한 것은 함수로 들어오면서 arr이라는 변수명이 포인터처럼 작동하기 때문에 가능한 것이 맞나요?

 

 

감사합니다:)

답변 1

1

배열도 산술 연산 가능합니다. 배열은 산술연산 안된다고 어느 부분에서 말씀하신 것일까요..? 😮

arr[2] 는 곧 *(arr + 2) 와도 같습니다. 즉 arr 배열의 이름은 첫번째 원소의 주소값이니까 arr + 2 는 첫번쨰 원소에서 int 공간 크기의 2칸 떨어진 곳의 주소, 즉 &arr[2] 를 의미합니다. 따라서  *(arr + 2) 는 곧 arr[2] 와도 같은 표현입니다. 

Syyy님의 프로필 이미지
Syyy
질문자

답변 감사드립니다!

 

<10.4 포인터와 배열> 강의 8:35초 쯤

"배열의 이름이 포인터처럼 사용될 수 있다고 해서, 배열 이름 자체도 산술연산을 할 수 있는 것은 아니다. arr 값이 변하면 메모리를 잃어버릴 수도 있기 때문에, 배열 그 자체를 산술 연산하는 것은 불가능하다. 그러나 포인터로 바꿔준 후에 포인터 변수를 이용해 산술연산을 하는 것은 가능하다. " 라는 내용이 나오는데요.

그러면 "arr 값이 변하면 메모리를 잃어버릴 수도 있기 때문에, 배열 그 자체를 산술 연산하는 것은 불가능하다"이기 때문에, 배열 자체를 건들이지 않는다면 괜찮은 것이니, 다시 말해  "arr += 2 "와 달리 "arr + 2"은 arr 자체를 변화시키지는 않기 때문에 가능한 거 같다는 생각을 해봤는데요.

  

제 추측이 맞을까요?

Syyy님의 프로필 이미지
Syyy

작성한 질문수

질문하기