프로젝트 & 과제/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]에 저장한다. 이렇게 배열의 요소만큼 반복한 후, 배열 전체를 돌면서 요소들을 출력한다.