더북(TheBook)

 

7장 해설

 

 

1분 퀴즈

1.

해설_ 세 친구 모두 포인터를 올바르게 이해하고 있습니다.

본문으로

 

2.

해설_ 포인터 변수 p는 변수 a의 메모리 주소를 저장하고 있습니다. 포인터 변수 앞에 *를 붙이면 포인터 변수가 저장한 주소의 값에 접근할 수 있으므로 15가 출력됩니다.

본문으로

 

3.

해설_ 포인터 변수 ptrarr 배열의 시작 주소를 가집니다. 그래서 ptr[2]에 4를 넣으면 arr 배열의 인덱스 2에 해당하는 값인 3을 4로 바꿉니다. 그러므로 arr[2]ptr[2] 모두 4가 출력됩니다.

본문으로

 

4.

해설_ 두 변수의 주소를 함수로 전달해야 하므로 변수 앞에 &를 붙입니다.

본문으로

 

 

셀프체크

#include <stdio.h>

void square(int * ptr); // 함수 선언

int main(void) {
    int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // 배열 선언 및 초기화
    for (int i = 0; i < 10; i++) {
        square(&arr[i]); // 함수 호출 : 배열 각 요소의 메모리 주소 전달
    }
    for (int i = 0; i < 10; i++) {
        printf("%d", arr[i]); // 변경된 배열의 각 요소 출력
        if (i + 1 < 10) { // 다음 요소가 남아 있는 경우에만 쉼표(,) 출력
            printf(", ");
        }
    }
    printf("\n");
    return 0;
}

void square(int * ptr) { // 함수 정의 : 값이 짝수인 경우 제곱으로 변경
    if (*ptr % 2 == 0) { // 나머지 연산자로 짝수인지 확인
        // *ptr = *ptr * *ptr;
        // 같은 문장이지만 가독성을 위해 괄호 처리
        *ptr = (*ptr) * (*ptr); // 메모리 주소 값의 제곱으로 변경
    }
}

본문으로

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.