Computer Science/C\C++

[C언어] malloc 동적할당을 이용한 배열 출력, 역으로 출력(포인터, 이중포인터)

hyunjin 2021. 5. 31. 12:39
  • 2개의 배열 크기 입력받기(malloc 함수를 이용해 동적할당 받아 포인터형으로 선언)
  • 배열들의 요소들을 입력받기
  • 배열 한번에 출력하는 함수 작성(포인터 사용)
  • 이중포인터 이용해 출력함수가 2개의 배열 순서 바꿔서 출력하도록
#include <stdio.h>
#include <stdlib.h>


void input(int* pmat, int size);
void output(int* pmat1, int* pmat2, int size1, int size2);
void change(int** pmat1, int** pmat2,int* p1, int*p2);

int main(void) {
  int n1, n2;

  printf("각각의 배열 몇개:");
  scanf("%d %d",&n1,&n2);

  int* mat1=(int* )malloc(sizeof(int)*n1);
  int* mat2=(int* )malloc(sizeof(int)*n2);

  input(mat1,n1);
  input(mat2,n2); //값을 입력하기
  
  output(mat1,mat2,n1,n2);//원래 배열 순으로 출력
  change(&mat1,&mat2,&n1,&n2);//두개의 배열 순서 바꾸기
  output(mat1,mat2,n1,n2);//바꾼 후의 배열 순으로 출력
  
  free(mat1);
  free(mat2);

  return 0;

}

void input (int* pmat, int size){
  for(int i=0; i<size; i++){
    printf("배열의 %d번째 요소 입력:",i);
    scanf("%d",pmat+i);
  }
}

void output(int* pmat1, int* pmat2, int size1, int size2){
  for(int i=0;i<size1+size2;i++){
    if(i<size1)
      printf("%d",*(pmat1+i));
    else{
      if(i==size1)
        printf("\n");
      printf("%d",*(pmat2+i-size1));
    }
  }
  printf("\n");    
}

void change(int** pmat1, int** pmat2,int* p1,int* p2){// 중요!!
  int t=*p1;
  *p1=*p2;
  *p2=t;

  int * temp=*pmat1;
  *pmat1=*pmat2;
  *pmat2=temp;
}

처음에 입력받는 n1과 n2는 배열을 바꿔줘도 자동으로 바뀌지않았다.

그래서 배열 바꾸는 함수에 n1과 n2 주소값을 넣어줘서 수동으로 바뀌게 하였다.

 

더보기

이게 최적의 정답같지는 않다.

서로 바꾸는 함수 잘기억해두기!