Minwoo Dev.

<윤성우의 열혈 C프로그래밍> :: 13. 포인터와 배열! 함께 이해하기 문제풀이 본문

C++

<윤성우의 열혈 C프로그래밍> :: 13. 포인터와 배열! 함께 이해하기 문제풀이

itisminu 2023. 9. 4. 13:36
728x90
반응형
SMALL

문제 13-1

 

문제 1

길이가 5인 int형 배열 arr을 선언하고 이를 1,2,3,4,5로 초기화한 다음, 이 배열의 첫 번째 요소를 가리키는 포인터 변수 ptr을 선언한다. 그 다음 포인터 변수 ptr에 저장된 값을 증가시키는 형태의 연산을 기반으로 배열요소에 접근하면서 모든 배열요소의 값을 2씩 증가시키고, 정상적으로 증가가 이루어졌는지 확인하는 예제를 작성해보자.

#include<stdio.h>

int main(void)
{
    int arr[5] = {1,2,3,4,5};
    int * ptr = &arr[0];
    for(int i=0;i<5;i++){
        *ptr += 2;
        ptr++;
    }

    for(int i=0;i<5;i++){
        printf("%d ",arr[i]);
    }
    printf("\n");


    return 0;
}

 

 

문제 2

문제 1에서는 포인터 변수 ptr에 저장된 값을 변경시켜가면서 배열요소에 접근하라고 하였다. 그런데 이번에는 포인터 변수 ptr에 저장된 값을 변경시키지 않고, ptr을 대상으로 덧셈연산을 하여, 그 결과로 반환되는 주소는 값을 통해서 모든 배열요소에 접근하여 값을 2씩 증가시키는 예제를 작성해보자.

 

#include<stdio.h>

int main(void)
{
    int arr[5] = {1,2,3,4,5};
    int * ptr = &arr[0];
    for(int i=0;i<5;i++){
        *(ptr+i) += 2;
    }

    for(int i=0;i<5;i++){
        printf("%d ",*(ptr+i));
    }
    printf("\n");


    return 0;
}

 

 

 

문제 3

길이가 5인 int형 배열 arr을 선언하고 이를 1,2,3,4로 초기화한 다음, 이 배열의 마지막 요소를 가리키는포인터 변수 ptr을 선언한다. 그 다음 포인터 변수 ptr에 저장된 값을 감소시키는 형태의 연산을 기반으로 모든 배열요소에 접근하여, 배열에 저장된 모든 정수를 더하여 그 결과를 출력하는 프로그램을 작성해보자.

#include<stdio.h>

int main(void)
{
    int arr[5] = {1,2,3,4,5};
    int *ptr = &arr[4];
    int sum = 0;
    for(int i=0;i<5;i++){
        sum += *(ptr-i);
    }

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


    return 0;
}

 

 

문제 4

길이가 6인 int 형 배열 arr를 선언하고 이를 1,2,3,4,5,6으로 초기화한 다음, 배열에 저장된 값의 순서가 6,5,4,3,2,1이 되도록 변경하는 예제를 작성해보자. 단, 배열의 앞과 뒤를 가리키는 포인터 변수 두 개를 선언해서 이를 활용하여 저장된 값의 순서를 뒤바꿔야 한다.

#include<stdio.h>

int main(void)
{
    int arr[6] = {1,2,3,4,5,6};
    int *ptr1 = &arr[0];
    int *ptr2 = &arr[5];
    int temp = 0;

    for(int i=0;i<3;i++){
        temp = *(ptr1+i);
        *(ptr1+i) = *(ptr2-i);
        *(ptr2-i) = temp;
    }
    for(int i=0;i<6;i++){
        printf("%d ",arr[i]);
    }
    printf("\n");

    return 0;
}

728x90
반응형
LIST