개인노트

[C언어] 2차원 배열의 포인터 연산(증가감소) 본문

C/문법

[C언어] 2차원 배열의 포인터 연산(증가감소)

BillnairK 2017. 7. 5. 22:17

길이가 3인 1차원 배열 arr를 선언하고 arr+1을 출력하면 어떤 결과가 나올까?


int arr[3]={1,2,3};

printf("arr + 1 : ", arr + 1 ); 


[ arr = arr[0] ] 1차원 배열에서 배열의 이름은 배열의 첫번째 요소를 가리키고, int형 배열은 배열의 요소마다

4Byte씩 사용 할 수 있다. 즉, arr의 크기는 12Byte이고 arr+1은 arr + 4Byte(자료형의 크기)라고 할 수 있다.

arr + 1은 arr[1]인 것이다.


이제 2차원 배열의 포인터 연산을 해보자.


int arr1[2][3];

int arr2[3][5]; 


위와같은 2차원 배열 2개를 선언한 후 각자 배열의 이름에 +1을 더해보자.


#include <stdio.h>

#include "stdlib.h"


int main(void) {

int arr1[2][3];

int arr2[3][5];


printf("arr1 : %d\n", arr1);

printf("arr1 + 1 : %d\n", arr1 + 1);

printf("\n");

printf("arr2 : %d\n", arr2);

printf("arr2 + 1 : %d\n", arr2 + 1);

printf("arr2 + 2 : %d\n", arr2 + 2);

printf("\n");

system("pause");

}


arr1에 +1을 하였을 때 증가값은 12, arr2에 +1을 하였을 때는 증가값이 20이고 +2를 하였을 때에는 증가값이 40이다.

1차원 배열에서 증가값은 자료형의 크기만큼 증가하였다. (감소할때도 마찬가지)

2차원 배열에서는 자료형의 크기 X 배열의 행의 크기이다. 2차원 배열에서 +1은 다음 요소로 가는 것이 아니라

 다음 행으로 가면서 여러 요소들을 건너 뛰게되는 것이다.

arr1은 열이 3칸이므로 자료형 int(4byte) * 3 → arr1 + 1을 했을 경우 증가되는 수치이다.

arr2는 열이 5칸이므로 자료형 int(4byte) * 5 만큼 증가 및 감소하게된다.

Comments