#include <stdio.h>
#include <stdlib.h>
// 3차원 배열을 3중 포인터로 접근하도록
int main(void) {
int m[2][3][2] = { {{10,11},{20,21},{30,31}},
{{40,41},{50,51},{60,61}} };
int *pa0[3] = { m[0][0], m[0][1], m[0][2] };
int **pp0 = pa0;
int *pa1[3] = { m[1][0], m[1][1], m[1][2] };
int **pp1 = pa1;
int **ppa[2] = { pp0, pp1 };
int ***ppp = ppa;
for (int i=0; i<2; ++i) {
for (int j=0; j<3; ++j) {
for(int k=0; k<2; ++k) printf("%d ", ppp[i][j][k]);
printf(",");
}
printf("\n");
}
return 0;
}
// p. 489
// 이차원 배열을 이중 포인터로 접근하도록
int main2342342888(void) {
int m[2][3] = { {1,2,3}, {4,5,6} };
// int *p0 = m[0];
// int *p1 = m[1];
// int *pa[2] = { m[0], m[1] }; // { p0, p1 };
int **pp = malloc(2*sizeof(int*));// = pa;
for (int i=0; i<2; ++i) pp[i] = m[i];
for (int i=0; i<2; ++i) {
for (int j=0; j<3; ++j) printf("%d ", pp[i][j]);
printf("\n");
}
return 0;
}
// p. 638 부터 관련 내용
int main234525235(void)
{
// int n = 3;
int *p = malloc(sizeof(int));
*p = 3;
int *p1 = p;
int *p2 = p;
// ..
// ..
printf("%d\n", *p1); //
printf("%d\n", *p2); //
free(p1);
printf("%d\n", *p2); //
return 0;
}
int main25252423(void)
{
int n;
scanf("%d", &n);
int *p = malloc(n*sizeof(int));
if (NULL == p) { // 메모리 동적 할당 실패
printf("malloc fail\n");
exit(EXIT_FAILURE); // 프로그램 비정상 종료
}
for (int i=0; i<n; ++i) { scanf("%d", p+i); }
for (int i=0; i<n; ++i) { printf("%d,", *(p+i)); }
printf("\nallocating more memory ...\n");
int *tmp = p; // 기존 포인터 주소 임시 저장
p = (int *) malloc(2*n*sizeof(int)); // 2배 공간 새로 할당
if (NULL == p) {
printf("malloc fail\n");
exit(EXIT_FAILURE); // 프로그램 비정상 종료
}
// 기존 공간에서 새 공간으로 데이터 복사
for (int i=0; i<n; ++i) { p[i] = tmp[i]; }
free(tmp); // 기존 메모리 공간 해제
for (int i=n; i<2*n; ++i) { scanf("%d", p+i); }
for (int i=0; i<2*n; ++i) { printf("%d,", p[i]); }
free(p); // 새 메모리 공간도 해제
return 0;
#if 0
// int a[n];
for (int i=0; i<n; ++i) {
scanf("%d", &a[i]);
}
for (int i=0; i<n; ++i) {
printf("%d,", a[i]);
}
#endif
return 0;
}