일차원 배열과 이차원 배열에서, 배열 및 포인터 표기법을 알아보았다.
#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();
}
출력 결과는 다음과 같다.
정리하자면 다음과 같다.
이차원 배열은 이중포인터와 다름없음을 잊지 말자!
'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 |