50. 인덱스 연산자

C언어에서는 포인터와 정수 사이의 더하기 연산 후에 간접 연산을 수행하는 것을 간단하게 인덱스 연산으로 표현할 수 있어요.

인덱스 연산자는 배열 선언에 사용하는 지시 연산자 [ ]와 기호가 같아요.
선언문 이외에서 포인터와 정수가 피연산자인 이항 연산자 [ ]를 인덱스 연산자라 불러요.

인덱스 연산은 상대적 거리에 있는 원소를 접근할 수 있어요.
인덱스는 상대적 거리를 나타내기 때문에 n 번째 원소에 접근하려면 n-1을 사용해야 한답니다.

int arr[3]={1,2,3};
int *p = arr;
int index = 0;

위와 같이 배열과 포인터, 기본 형식을 선언하였을 때 arr[index]와 p[index]와 같이 사용하면 *(arr+index), *(p+index)와 같은 표현이예요.
인덱스 연산은 간접 연산보다 간단해서 배열의 각 원소에 접근할 때 자주 사용한답니다.

◈ 인덱스 연산을 사용한 예

#include <stdio.h>
int main()
{
    int arr[3]={1,2,3};
    int *p = arr;
    int index = 0;
 
    printf("Test 1\n");
    for(index = 0; index < 3; index++)
    {
        printf("index: %d, 값: %d\n", index, arr[index]);
    } 
    printf("Test 2\n");
    for(index = 0; index < 3; index++)
    {
        printf("index: %d, 값: %d\n", index, p[index]);
    }
    return 0;
}

◈ 실행 결과

Test 1
index: 0, 값: 1
index: 1, 값: 2
index: 2, 값: 3
Test 2
index: 0, 값: 1
index: 1, 값: 2
index: 2, 값: 3

◈ 기본 연습 (정답 바로가기)
1. 4 명의 국어 성적을 관리할 수 있는 배열을 선언하시오.
그리고 첫번째 학생은 90점, 두번째 학생은 85, 세번째 학생은 69, 네번째 학생은 75점으로 대입합니다.
네 명의 국어 성적과 합계, 평균을 출력하는 프로그램을 작성하시오.

2. 한 명의 국어, 영어, 수학 성적을 관리하는 프로그램을 작성하시오.
a. 국어, 영어, 수학 성적은 초기값을 -1로 설정합니다.
b. 프로그램은 다음을 반복합니다.
b.1 “I: 추가 D: 삭제 S:검색 L:전체 출력 E:종료”를 화면에 출력
b.2 하나의 문자를 입력받음
b.3 입력받은 문자가 ‘i’ 혹은 ‘I’일 때는 추가, ‘d’ 혹은 ‘D’일 때는 삭제 , ‘s’ 혹은 ‘S’일 때는 검색,
‘l’, ‘L’일 때는 전체 출력을 수행합니다.
* 추가 기능에서는 과목을 선택한 후에 성적을 입력받아 해당 과목의 성적을 설정합니다.
*삭제 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 -1로 설정합니다.
*검색 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 출력합니다.
*전체 출력에서는 모든 과목의 성적을 출력합니다.
(단, E를 누르면 프로그램을 종료)

3.10 개의 정수를 입력받아 크기 순으로 정렬하시오.