Computer Science/Algorithm

[배열과 포인터] 일차원 배열과 이차원 배열 및 포인터 표기 방법

해피단무지 2020. 9. 1. 21:09

일차원 배열과 이차원 배열에서, 배열 및 포인터 표기법을 알아보았다.

#include <stdio.h>

void onedim()
{
    int i;
    int a[5] = {1,2,3,4,5};
    int *ptr;
    int **c;
    ptr=a;
    c=&ptr;

    printf("&a[0]: %p, a: %p, b: %p, c: %p\n", &a[0], a, ptr, c);
    for (i = 0; i < 5; i++)
    {
        printf("a[0]: %d, *(a+%d): %d, *(ptr+i): %d\n", a[i], i, *(a+i), *(ptr+i));
    }

}
void twodim()
{
    int i, j;
    int a[2][3] = {1,2,3,40,50,60};
    /*int **dptr;
    dptr = a;*/ // error
    int (*dptr)[3];
    dptr = a;

    printf("a: %p(**a: %d), dptr: %p(**dptr: %d)\n", a, **a, dptr, **dptr);

    printf("a[0]: %p(*a[0]: %d), dptr[0]: %p(*dptr[0]: %d), a+0: %p, dptr+0: %p)\n", a[0], *a[0], dptr[0], *dptr[0], a+0, dptr+0);
    printf("a[1]: %p(*a[1]: %d), dptr[1]: %p(*dptr[1]: %d), a+1: %p, dptr+1: %p)\n", a[1], *a[1], dptr[1], *dptr[1], a+1, dptr+1);

    for (i=0; i<2; i++) {
        for (j=0; j<3; j++) {
            printf("addr:   &a[i][j] = a[i]+j = *(a+i)+j = %p, %p, %p\n", &a[i][j], a[i]+j, *(a+i)+j);
            printf("value:  a[i][j] = *(a[i]+j) = *(*(a+i)+j) = %d, %d, %d\n\n", a[i][j], *(a[i]+j), *(*(a+i)+j));
        }
    }

}

int main()
{
    printf("-------------one dim-----------\n");
    onedim();
    printf("\n-------------two dim-----------\n");
    twodim();
}

출력 결과는 다음과 같다.

정리하자면 다음과 같다.

이 표의 출처는 https://itdexter.tistory.com/438

이차원 배열은 이중포인터와 다름없음을 잊지 말자!

'Computer Science > Algorithm' 카테고리의 다른 글

Heap sort (힙정렬)  (0) 2020.09.03
Merge Sort (병합 정렬)  (0) 2020.09.03
[구조체] struct 선언 방법들  (0) 2020.09.01
Insertion sort(삽입 정렬)  (0) 2020.08.31
Selection sort(선택 정렬)  (0) 2020.08.31