1-1. 배열 전달과 포인터

문제설명

배열을 함수의 인자로 전달할 때 실제로 어떤 형태로 전달되는지 확인하는 문제입니다.


목표

  • 배열명이 함수 호출 시 포인터처럼 전달된다는 점을 이해한다.
  • 배열 매개변수가 실제로는 포인터라는 점을 이해한다.

요구사항

아래 코드의 빈칸을 완성하시오.

#include <stdio.h>

void print_array( __________ )
{
    for(int i = 0; i < size; i++)
        printf("%d ", arr[i]);
}

int main(void)
{
    int nums[3] = {10, 20, 30};

    print_array(nums, 3);

    return 0;
}
 

 

예상 출력

10 20 30
 

 

예상 코드

더보기
더보기
#include <stdio.h>

void print_array(int* arr, int size)
{
    for(int i = 0; i < size; i++)
        printf("%d ", arr[i]);
}

int main(void)
{
    int nums[3] = {10, 20, 30};

    print_array(nums, 3);

    return 0;
}
 
 

1-2. Call-by-value

문제설명

값 전달(Call-by-value)의 특징을 이해하는 문제입니다.


목표

  • 함수 호출 시 값이 복사된다는 점을 이해한다.
  • 함수 내부 수정이 원본 변수에 영향을 주지 않는다는 점을 이해한다.

요구사항

아래 코드의 실행 결과를 예상하고 왜 그런 결과가 나왔는지를 설명하시오. 

#include <stdio.h>

void change(int num)
{
    num = 100;
}

int main(void)
{
    int value = 10;

    change(value);

    printf("%d\n", value);

    return 0;
}
 

예상 답안

더보기
더보기

실행결과

10
 

-> 함수 호출시 main()에서 value의 값만 change()로 num 매개변수에 복사되어 전달되기 때문이다. 

 

1-3. Call-by-reference 

문제설명

포인터를 이용하여 함수 밖 변수의 값을 수정한다.

 

목표

  • 주소 전달의 의미를 이해한다.
  • 포인터를 통해 원본 데이터를 수정할 수 있음을 이해한다.

요구사항

빈칸을 완성하여 value 값이 100으로 변경되도록 작성하시오.

 
#include <stdio.h>

void change( __________ )
{
    *num = 100;
}

int main(void)
{
    int value = 10;

    change( __________ );

    printf("%d\n", value);

    return 0;
}
 

예상 출력

100
 

 

예상코드

더보기
더보기
#include <stdio.h>

void change(int *num)
{
    *num = 100;
}

int main(void)
{
    int value = 10;

    change(&value);

    printf("%d\n", value);

    return 0;
}

 

1-4. const 포인터

 

문제설명

포인터와 const의 의미를 구분하는 문제입니다.

 

목표

  • const 위치에 따라 의미가 달라짐을 이해한다.
  • “값 변경 금지”와 “주소 변경 금지”를 구분한다.

요구사항

다음 코드 중 컴파일 오류가 발생하는 줄을 고르고  각 오류의 이유를 설명하시오. 

int num1 = 10;
int num2 = 20;

const int *ptr1 = &num1;
int * const ptr2 = &num1;

① *ptr1 = 30;
② ptr1 = &num2;

③ *ptr2 = 40;
④ ptr2 = &num2;
 

 

 

예상 답안

더보기
더보기

①: ptr1이 가리키는 값이 상수이므로 수정 불가능

④: ptr2 값 자체가 상수이므로 다른 주소를 저장할 수 없음

 

 

+ Recent posts