Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- web
- BOJ
- programmers
- php
- BASIC
- 따라하며 배우는 C언어
- udemy
- 종만북
- 생활코딩
- C
- Cleancode
- dfs
- graph
- sorting
- 백준
- server
- Python
- JavaScript
- String
- Algorithm
- 따배씨
- BFS
- Algospot
- Math
- 인프런
- C언어
- greedy
- DP
- 따라하면서 배우는 C언어
- 정수론
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 12.15 동적 할당 메모리를 배열처럼 사용하기 본문
따배씨 - 따라하며 배우는 C언어
12강 Storage Classes, Linkage and Memory Management
12.15 동적 할당 메모리를 배열처럼 사용하기
#include <stdio.h>
#include <stdlib.h>
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;
return 0;
}
- 변수 하나를 동적 할당으로 사용
#include <stdio.h>
#include <stdlib.h>
int main(){
/*
1D array
*/
int n = 3;
int* ptr = (int*)malloc(sizeof(int) * n);
if(!ptr) exit(1);
ptr[0] = 123;
*(ptr + 1) = 456;
*(ptr + 2) = 789;
free(ptr);
ptr = NULL;
return 0;
}
*(ptr + 1) = 456;
- *(ptr+1) = ptr 주소 값 + int size = ptr[1]
#include <stdio.h>
#include <stdlib.h>
int main(){
/*
2D array
*/
int row = 3, col = 2;
int(*ptr2d)[2] = (int(*)[2])malloc(sizeof(int) * row * col);
//int(*ptr2d)[col] = (int(*)[col])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");
}
return 0;
}
int(*ptr2d)[2] = (int(*)[2])malloc(sizeof(int) * row * col);
- 동적 할당을 이용했지만, col 갯수는 지정되어 있어서 효용성이 떨어짐
#include <stdio.h>
#include <stdlib.h>
int main(){
/*
Using 1D arrays as 2D arrays
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
*/
int row = 3, col = 2;
int* ptr = (int*)malloc(sizeof(int) * row * col);
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");
}
return 0;
}
- 동적 할당 1차원 배열을, 2차원 배열로 사용
#include <stdio.h>
#include <stdlib.h>
int main(){
/*
Using 1D arrays as 3D arrays
row = 3, col = 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
3D
rw, col, depth, height
*/
int row = 3, col = 2, depth = 2;
int* ptr = (int*)malloc(sizeof(int) * row * col * depth);
if (!ptr) exit(1);
for (int d = 0; d < depth; d++)
for (int r = 0; r < row; r++)
for (int c = 0; c < col; c++)
ptr[c + col * r + (row * col) * d] = c + col * r + (row * col) * d;
for (int d = 0; d < depth; d++)
for (int r = 0; r < row; r++)
for (int c = 0; c < col; c++)
printf("%d ", *(ptr + c + col * r + (row * col) * d));
printf("\n");
printf("\n");
return 0;
}
- 동적 할당 1차원 배열을, 3차원 배열로 사용
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
http://blog.naver.com/atelierjpro
http://www.inflearn.com/course/following-c
'Language > C' 카테고리의 다른 글
[따배씨] 12.17 동적 할당 메모리와 저장 공간 분류 (0) | 2021.06.15 |
---|---|
[따배씨] 12.16 calloc(), realloc() (0) | 2021.06.15 |
[따배씨] 12.14 메모리 누수와 free() 의 중요성 (0) | 2021.06.15 |
[따배씨] 12.13 메모리 동적 할당 (0) | 2021.06.14 |
[따배씨] 12.12 난수 생성기 모듈 만들기 예제 (0) | 2021.06.14 |
Comments