C언어/주차별 문제

[10주차] 배열의 Swap

슈슈버거 2023. 6. 6. 15:03

문제


내가 작성한 코드

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

void swap(int **arr1, int **arr2); //swap 함수 선언

int main() {
    int arr1[5]; //5칸짜리 첫번째 배열
    int arr2[5]; //5칸짜리 두번째 배열

    for(int i = 0; i<5; i++){ //arr1에 입력받기
        scanf("%d", &arr1[i]);
    }   

    for(int i = 0; i<5; i++){ //arr2에 입력받기
        scanf("%d", &arr2[i]);
    }
    
    //포인터와 연결
    int *ptr1 = &arr1;
    int *ptr2 = &arr2;

    swap(&ptr1, &ptr2); //swap 함수 호출

    //결과 출력
    for(int i = 0; i<5; i++){
        printf("%d ", *(ptr1+i));
    }
    printf("\n");   

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

    return 0;
}

void swap(int **arr1, int **arr2){
    int *tmp; //포인터 생성
    tmp = *arr1; //arr1의 주소 tmp에 연결
    *arr1 = *arr2; //arr1의 주소를 arr2로 갱신
    *arr2 = tmp; //arr2의 주소를 tmp로 갱신
}

tmp를 쓰는 원리는 같지만 주어지는 값과 저장하는 위치가 주소임에 주의!!