동적할당(dynamic allocation)
malloc()
자료형* 포인터명 = (자료형*)malloc(sizeof(자료형)*크기);
자료형* 포인터명 = (자료형*)malloc(크기);
동적할당 초기화(clear allocation)
calloc()
자료형* 포인터명 = (자료형*)calloc(크기, sizeof(자료형));
동적할당 크기변경(resize allocation)
realloc()
자료형* 포인터명1 = (자료형*)malloc(sizeof(자료형)*크기);
자료형* 포인터명2 = (자료형*)realloc(포인터명1, sizeof(자료형)*변경할크기);
동적할당 메모리 해제(중요)
free(포인터명);
* 메모리를 해제하지 않으면 사라지지 않고 남아있기 때문에 overflow가 생기면 심각한 오류가 발생한다.
꼭 free함수로 메모리 해제를 해줘야 한다.
#include <stdio.h>
#include <stdlib.h>
void main() {
int* mAr = 0;
mAr = (int*)malloc(sizeof(int) * 5);
mAr = (int*)calloc(5, sizeof(int));
mAr = (int*)realloc(mAr, sizeof(int)*10);
for (int i =0 ; i < 10; i++) {
mAr[i] = i + 1;
}
for (int i =0 ; i < 10; i++) {
printf("%d ", mAr[i]);
}
printf("\n");
free(mAr);
}
동적배열
동적배열 사용
포인터명[index]
*(포인터명+i)

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
//입력한 정수들을 오름차순으로 정렬하기
//선택정렬 함수를 사용, call by address
//void 타입으로 선언
//정렬하기\n1. 오름차순\n 2. 내림차순\n 3. 나가기\n
void sortAsc(int* ar, int length);
void sortDsc(int* ar, int length);
void main() {
int* arNum = 0;
int size = 0;
int choice = 0;
char* dot[] = { ".", "..", "..." };
char* loading[] = { "□□□□□□□□□","■■■□□□□□□", "■■■■■■■□□" };
for (; 1;) {
printf("입력하실 정수의 갯수를 입력하세요(나가기: -99)\n");
scanf_s("%d", &size);
if (size == -99) break;
arNum = (int*)calloc(size, sizeof(int));
printf("입력하신 갯수만큼 정수를 입력하세요\n");
for (int i = 0; i < size; i++) {
scanf_s("%d", arNum + i);
}
system("cls");
for (int i = 0; i < size; i++) {
printf("%d ", arNum[i]);
}
again:;
printf("\n1. 오름차순\n2. 내림차순\n3. 나가기\n");
scanf_s("%d", &choice);
if (choice == 3) break;
switch (choice) {
case 1:
sortAsc(arNum, size);
printf("\n");
break;
case 2:
sortDsc(arNum, size);
printf("\n");
break;
default:
printf("잘못 입력하셨습니다. 다시 시도하세요");
goto again;
}
system("cls");
for (int i = 0; i < 3; i++) {
printf("%s\n", loading[i]);
printf(" 정렬중%s", dot[i]);
Sleep(1000);
system("cls");
}
for (int i = 0; i < size; i++) {
printf("%d ", arNum[i]);
Sleep(500);
}
printf("\n");
free(arNum);
}
}
void sortAsc(int* ar, int length) {
for (int i = 0; i < length-1; i++) {
for(int j =i+1; j < length; j++){
if (ar[i] > ar[j]) {
int temp = ar[i];
ar[i] = ar[j];
ar[j] = temp;
}
}
}
}
void sortDsc(int* ar, int length) {
for (int i = 0; i < length - 1; i++) {
for (int j = i + 1; j < length; j++) {
if (ar[i] < ar[j]) {
int temp = ar[i];
ar[i] = ar[j];
ar[j] = temp;
}
}
}
}
int arr[] = {0, };
*정적배열은 []안에 상수만 가능. 그래서 index입력받는거 X
'C언어 > 예습' 카테고리의 다른 글
[C언어 예습]DAY18_구조체1 (0) | 2020.02.10 |
---|---|
[C언어 예습]DAY17_동적 배열 실생활 예제(막대그래프), 알고리즘 예제(Baseball Game) (0) | 2020.02.10 |
[C언어 예습]DAY15_인터배열과 배열포인터, 지역변수, 전역변수, static변수 (0) | 2020.02.10 |
[C언어 예습]DAY14_포인터(2) 정적 배열, 동적 배열, 이중 포인터 (0) | 2020.02.05 |
[C언어 예습]DAY13_포인터(1) (0) | 2020.02.05 |