전에 올린 글에서 너무 어렵게 풀었다..
더 쉽게 풀 수 있는 방법이 있었다.
arr[i]와 *(arr+i)가 동일함을 잊지말것!
malloc함수가 배열을 주는 것이 아님...
//두개의 1차원 배열을 포함하는 포인터 배열을 선언하고 출력
//이중포인터 이용 포인터 배열 내 mat1과 mat2 위치 바꾸어 출력
#include <stdio.h>
#include <stdlib.h>
int* input(int* x, int s);
void change(int** x);
int main(void) {
int n, m,i;//n,m : 각각의 배열 크기/i : 반복문에 쓰일 변수
printf("각각의 배열 몇개?: ");
scanf("%d %d", &n, &m);
//malloc이용해 배열생성
int *mat1 = (int *)malloc(sizeof(int)*n);//n개의 정수 할당
int *mat2 = (int *)malloc(sizeof(int)*m);
mat1=input(mat1, n);
mat2=input(mat2, m);
int *ptr[] = { mat1,mat2 }; // 두개의 주소를 담는 포인터 배열
int **dptr = ptr;// ptr의 첫번째 주소값을 담는 포인터
for (i = 0; i < n; i++)
printf("%d", *(ptr[0] + i));//ptr[0]에는 mat1의 첫번째 주소가 담겨있다. ex. arr[i]는 *(arr+i)와 동일
printf("\n");
for (i = 0; i < m; i++)
printf("%d", *(ptr[1] + i));
printf("\n");
change(dptr);
for (i = 0; i < m; i++)
printf("%d", *(ptr[0] + i));
printf("\n");
for (i = 0; i < n; i++)
printf("%d", *(ptr[1] + i));
printf("\n");
free(mat1);
free(mat2);
}
int *input(int *x, int s) {
int i;
for (i = 0; i < s; i++){
printf("배열의 %d번째 요소 입력:",i);
scanf("%d", x+i);
}
return x;
}
void change(int **x) {
//dptr이용하여 ptr배열의 주소를 바꿔주면 된다.
int *temp;
temp = *x;//*x=*dptr
*x = *(x + 1);
*(x + 1) = temp;
}
'Computer Science > C\C++' 카테고리의 다른 글
[C언어] 헤더파일 디자인과 활용 (0) | 2021.06.02 |
---|---|
[C언어] 파일 입출력 (0) | 2021.06.02 |
[C언어] malloc 동적할당을 이용한 배열 출력, 역으로 출력(포인터, 이중포인터) (0) | 2021.05.31 |
[C언어] 구조체 (Structure) (0) | 2021.05.26 |
[C언어] 문자 역으로 출력, strncat/strlen활용 (0) | 2021.05.26 |