메모리의 동적 할당
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void ex1802() {
int arrsize, darrsize;
printf("arr size, darrsize 입력: ");
scanf_s("%d %d", &arrsize, &darrsize);
int* iptr = (int*)malloc(sizeof(int) * arrsize);
double* dptr = (double*)malloc (sizeof(double) * darrsize);
int i;
printf("int 값 출력 및 입력 \n");
for (i = 0; i < arrsize; i++) {
printf("%d번째 array값 입력: ");
scanf_s("%d", &iptr[i]);
}
for (i = 0; i < arrsize; i++) {
printf("%d ", iptr[i]);
}
printf("\n");
printf("double 값 입력 및 출력: \n");
for (i = 0; i < darrsize; i++) {
printf("%d번째 darray값 입력: ");
scanf_s("%f", &dptr[i]);
}
for (i = 0; i < darrsize; i++) {
printf("%f\n", dptr[i]);
}
if (iptr != NULL)free(iptr);
if (dptr != NULL)free(dptr);
}
void main() {
ex1802();
}
arr size, darrsize 입력: 3 3
int 값 출력 및 입력
415280064번째 array값 입력: 1
415280192번째 array값 입력: 2
415280192번째 array값 입력: 3
1 2 3
double 값 입력 및 출력:
415280064번째 darray값 입력: 4
415280192번째 darray값 입력: 5
415280192번째 darray값 입력: 6
-6277436788246010498694920686139708971712647739890593669666194849792.000000
-6277436789815285932541590877098656327514564343916182530782203478016.000000
-6277436791384561366388261068057603683316480947941771391898212106240.000000
프로그램이 실행되는 동안 사용할 메모리 공간을 할당한다
사용이 끝난 후 free로 메모리를 해제해줘야 함
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* getString(void) {
char* strinput[100];
printf("좋아하는 단어는? ");
gets(strinput);//입력받기
char* str = (char*)malloc(sizeof(char) * strlen(strinput));//사이즈:입력받은 문자열의 길이
str = strinput;
return str;
}
void ex1803(){
char* result = getString();
printf("당신이 좋아하는 단어는: %s\n", result);
}
void main() {
ex1803();
}
좋아하는 단어는? banana
당신이 좋아하는 단어는: banana
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void ex1804() {
int* ptr;//할당된 메모리의 주소값을 저장할 포인터
int count = 0; //입력받은 데이터 개수
int maxSize = 3; //할당받은 메모리 크기
int num;
int i;
ptr = (int*)calloc(maxSize, sizeof(int));
while (1) {
printf("정수를 입력하세요(-1입력시 종료): ");
scanf_s("%d", &num);
if (num == -1) {
break;
}
//입력한 정수의 개수가 메모리 크기만큼 찼을 경우
if (count == maxSize) {
maxSize += maxSize;
//재할당을 통한 메모리 영역 확장
ptr = (int*)realloc(ptr, maxSize * sizeof(int));
}
ptr[count++] = num;
}
for (i = 0; i < count; i++) {
printf("%d ", ptr[i]);
}
printf("\n");
if (ptr != NULL) {
free(ptr);
}
}
void main() {
ex1804();
}
정수를 입력하세요(-1입력시 종료): 1
정수를 입력하세요(-1입력시 종료): 2
정수를 입력하세요(-1입력시 종료): 3
정수를 입력하세요(-1입력시 종료): 4
정수를 입력하세요(-1입력시 종료): 5
정수를 입력하세요(-1입력시 종료): 6
정수를 입력하세요(-1입력시 종료): -1
1 2 3 4 5 6
s2에 동적할당을 진행하고, s1의 값을 복사한다
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void prac01() {
char* s1 = "Take a look";
char* s2 = (char*)malloc(sizeof(char) * strlen(s1)+1);
strcpy(s2, s1);
printf("%s\n", s2);
if (s2 != NULL)free(s2);
}
void main() {
prac01();
}
Take a look
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void prac03() {
int num=0;
int cnt=0;
printf("문자열의 최대 길이는? ");
scanf_s("%d", &num); //문자열 길이 입력받기
char* str = (char*)malloc(sizeof(char) * (num+1));//입력 받은 문자열의최대길이
printf("문자열 입력: ");
gets(str);
gets(str);
for (int i = 0; i < num; i++) {
if ((int)str[i] == 97) {
cnt++;
}
}
printf("a의 개수는 %d 개 입니다.", cnt);
}
void main() {
prac03();
}
문자열의 최대 길이는? 50
문자열 입력: hahaha
a의 개수는 3 개 입니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void prac02() {
int arr[5] = { 10,20,30,40,50 };
int* pa;
int* pb;
int* pc;
int i;
pa = (int*)malloc(sizeof(arr));
for (i = 0; i < 5; i++) {
pa[i] = arr[i];
}
pb = (int*)calloc(pa[3], sizeof(int));
pc = (int*)realloc(NULL, pa[4]);
printf("pa: %d,pb: %d,pc: %d", sizeof(pa), sizeof(pb), sizeof(pc));
}
void main() {
prac02();
}
pa: 8,pb: 8,pc: 8
'Dev. > C++' 카테고리의 다른 글
구조체배열 응용문제 (0) | 2022.04.05 |
---|---|
구조체와 배열/구조체와 포인터 (0) | 2022.04.05 |
구조체 (0) | 2022.04.04 |
포인터의 포인터/싱글포인터/더블포인터 (0) | 2022.04.01 |
c언어 난수 발생시키기/가위바위보/오름차순,내림차순 (0) | 2022.04.01 |
댓글