개인노트
[C언어] 2차원 배열의 포인터 연산(증가감소) 본문
길이가 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 만큼 증가 및 감소하게된다.
'C > 문법' 카테고리의 다른 글
[C언어] 포인터 배열과 배열 포인터의 차이점 (0) | 2017.07.06 |
---|---|
[C언어] 2차원 배열의 포인터변수 선언 (0) | 2017.07.05 |
[C언어] 2차원배열의 포인터 (0) | 2017.07.05 |
[C언어] 더블포인터 (0) | 2017.07.05 |
[C언어] 2차원 배열 선언과 초기화 (0) | 2017.07.04 |