c언어 프로그래밍 1차원 배열 이름을 대상으로 한 * 연산
c언어 프로그래밍 1차원 배열 이름을 대상으로 한 * 연산
■ 지난 글에서 배열의 이름은 포인터 형이라는 걸 확인해봤었는데요. 둘이 같다면 배열 이름을 대상으로도 *연산을 할 수도 있고 반대로 포인터를 배열의 이름처럼 사용해서 그 요소에 접근할 수 있다는 의미인데요. 그 과정들을 예제로 살펴보겠습니다.
먼저 배열 이름을 대상으로 *연산을 하는 과정입니다.
▲ int형 배열 a와 double형 배열 b를 각각 선언하고 값을 초기화하고 있는데요. a와 b에 *연산자로 접근하고 있습니다. 지난 글에서 배열의 이름은 첫 번째 요소 [0]의 주소값을 저장한다고 했었는데요. *연산자로 그 자리에 접근해서 저장된 값들을 출력하고 있는 모습입니다. 10과 10.1이 출력되겠죠? 확인해보겠습니다.
▲ 예상했던 값이 출력되네요. 그럼 다시 한 번 접근해서 이미 저장된 데이터에 다른 값을 더하는 연산을 해보겠습니다. 가능할까요?
▲ *연산자로 a와 b에 접근해서 각각 50과 40.4를 더하고 있는데요. 값이 제대로 합쳐진 걸 확인할 수 있습니다. 이렇게 포인터 변수에서 할 수 있었던 연산을 배열 이름으로도 똑같이 할 수 있습니다. 참고로 배열과 포인터 변수는 같다고 생각하면 됩니다. 단지 차이점이 있다면 배열 이름은 첫 번째 요소의 주소값을 저장하는데 그 값을 변경할 수 없는 상수이고 포인터는 저장된 주소값을 변경할 수 변수라는 차이점만 있을 뿐입니다. 연산 등 다른 역할은 똑같이 합니다.
그렇다면 반대로 포인터 변수를 배열처럼 이용할 수 있을까요? 그 역시도 다음 예제에서 확인해보고 마무리하겠습니다.
▲ a는 3개의 요소를 갖는 int형 배열입니다. 그리고 b는 그 배열의 첫 번째 요소의 주소를 저장하는 포인터 변수입니다. 즉 a와 b가 가리키는 요소는 첫 번째 요소인 10이 저장된 메모리의 주소입니다. 그곳에 저장된 값을 출력하기 위해서 배열[인덱스] 값으로 접근하고 있는데요. 포인터 변수 b도 똑같은 형식으로 접근해도 같은 값이 출력됩니다. 이렇게 배열과 포인터 변수는 같은 형식으로 이용할 수 있습니다.