프로젝트 & 과제/3학년
[C언어] 2차원 배열의 합
qqlzzb
2022. 1. 29. 15:09
개요
프로그래밍 언어 : C언어
과제 수행 날짜 : 2020.10.02
과제 개요 : 포인터를 이용해서 2차원 배열 2개의 원소들을 각각 더하여 출력
코드
#include <stdio.h>
int main()
{
int arrA[5][6] = { {1,2,3,4,5,6},
{1,2,3,4,5,6},
{1,2,3,4,5,6},
{1,2,3,4,5,6},
{1,2,3,4,5,6} };
int arrB[5][6] = { {1,2,3,4,5,6},
{1,1,1,1,1,1},
{2,2,2,2,2,2},
{10,10,10,10,10,10},
{100,100,100,100,100,100} };
int *p = &arrA[0][0];
int *q = &arrB[0][0];
for(int i = 0; i<30; i++)
{
p[i] = *(p+i) + *(q+i);
}
for(int a = 0; a<30; a++)
{
if(a % 6 == 0)
{
printf("\n");
}
printf("%d", arrA[a/6][a%6]);
}
return 0;
}
결과
배열 A와 배열 B의 처음을 가리키는 포인터 p와 q를 선언한다. 그리고 아래의 for 문을 돌면서 arrA와 arrB를 더한 값을 arrA에 저장한다.
for(int i=0; i<30; i++)
{
p[i] = *(p+i) + *(q+i);
}
배열에 저장하는 for 문에 직접 숫자를 대입해보면, i가 0인 경우 p[0] = *p + *q가 되고 이를 해석하면 p[0]은 arrA[0]과 같으므로 arrA[0]에 p가 가리키는 곳의 값과 q가 가리키고 있는 곳의 값을 더해 저장한다.
i가 0이 아닌 1인 경우에는 p[1] = *(p+1) + *(q+1)이 되므로 p가 가리키고 있는 곳의 다음 위치(arrA[1])에 있는 값과 q가 가리키고 있는 곳의 다음 위치(arrB[1])에 있는 값을 arrA[1]에 저장한다. 이렇게 배열의 요소만큼 반복한 후, 배열 전체를 돌면서 요소들을 출력한다.