C언어 - 동적 할당 메모리를 배열처럼 사용하기
2020. 11. 13. 16:58ㆍ개인공부/C언어
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h> // malloc(), free()
int main() {
/*
One variable
*/
/*int* ptr = NULL;
ptr - (int*)malloc(sizeof(int) * 1);
if (!ptr) exit(1);
*ptr = 1024 * 3;
printf("%d\n", *ptr);
free(ptr);
ptr = NULL;*/
/* 1D array*/
//int n = 3;
//int* ptr = (int*)malloc(sizeof(int) * n);
////얼마나 메모리를 동적할당으로 받아와 그 메모리의 첫번째 주소를 ptr에 저장
//// 힙에 들어가있는 ptr 메모리는 프로그램 끝날때까지 남아있는다.
//// ptr이라는 변수자체는 지역변수로 함수에서 나가면 메모리에서 빠진다.
//
//if (!ptr) exit(1);
//ptr[0] = 123;
//// 배열은 블록에서 나가면 메모리에서 제외
//*(ptr + 1) = 456;
////int* ptr = (int*)malloc(sizeof(int) * n);
//// int로 형변환 해서 ptr에 넣어줬기때문에
//// *(ptr + 1) = 456; 이런식으로 쓸수있다.
//*(ptr + 2) = 789;
//free(ptr);
//ptr = NULL;
/* 2차원 배열*/
//int row = 3, col = 2;
//int(*ptr2d)[2] = (int(*)[2])malloc(sizeof(int) * row * col);
////int(*ptr2d)[2] = (int(*)[2])malloc(sizeof(int) * row * col); //VLA
//if (!ptr2d) exit(1);
//for (int r = 0; r < row; r++)
// for (int c = 0; c < col; c++)
// ptr2d[r][c] = c + col & r;
//for (int r = 0; r < row; r++) {
// for (int c = 0; c < col; c++)
// printf("%d ", ptr2d[r][c]);
// printf("\n");
//}
// 실용적으로는 1차원배열을 2차원이나 3차원배열처럼 사용하는것.
/* 1차원을 2차원처럼 사용하기*/
/*
row =3, col=2
(r , c)
2D
(0, 0) (0, 1)
(1, 0) (1, 1)
(2, 0) (2, 1)
1D
(0, 0) (0, 1) (1, 0) (1, 1) (2, 0) (2, 1)
0 1 2 3 4 5 = c+ col *r
//계산식 c+ col *r
(1, 0) 순서 구하기
c= 0
col = 2
r = 1
0 + 2*1 = 3
고로 3번째.
*/
int row = 3, col = 2;
int* ptr = (int*)malloc(row * col * sizeof(int));
if (!ptr) exit(1);
for (int r = 0; r < row; r++)
for (int c = 0; c < col; c++)
ptr[c + col * r] = c + col * r;
for (int r = 0; r < row; r++)
{
for (int c = 0; c < col; c++)
printf("%d ", *(ptr + c + col * r));
printf("\n");
}
//결과값
/*
0 1
2 3
4 5
*/
/*
1차원 배열 3차원처럼 쓰기
row =3, col = 2, depth = 2 // 2차원 array가 2개있다(depth 2)
(r, c, d)
3D
----------------
(0,0,0) (0,1,0)
(1,0,0) (1,1,0)
(2,0,0) (2,1,0)
----------------
(0,0,1) (0,1,1)
(1,0,1) (1,1,1)
(2,0,1) (2,1,1)
----------------
1d
(0,0,0) (0,1,0) (1,0,0) (1,1,0) (2,0,0) (2,1,0) (0,0,1) (0,1,1) (1,0,1) (1,1,1) (2,0,1) (2,1,1)
0 1 2 3 4 5 6 7 8 9 10 11
= c + col * r + (col * row) * d
(1, 1, 1) 구하기
= 1 + 2 * 1 + (3*2) * 1 = 1 + 2 + 6 = 9
*/
return 0;
}
출처 : 홍정모의 따라배우는 C언어
'개인공부 > C언어' 카테고리의 다른 글
C언어 - 멀티쓰레딩 (Multi - Threading) (0) | 2020.11.13 |
---|---|
C언어 - 동적 할당 메모리와 저장 공간 분류 (0) | 2020.11.13 |
C언어 - 메모리 누수와 free()의 중요성 (0) | 2020.11.13 |
C언어 - 메모리 동적 할당!! (Dynamic Storage Allocation) (0) | 2020.11.13 |
C언어 - 정적 변수의 외부연결 (external linkage), 내부연결 (internal linkage) (0) | 2020.11.13 |