코드네임 :

C혼공 10,11,13일차 - 동적할당 (너무 어려워서 한번 더 봐 ㅜㅜ) -명령행 인수는 뭐고... / 도전실전 문제도 푸러야댐 본문

⚙️Computer System/C

C혼공 10,11,13일차 - 동적할당 (너무 어려워서 한번 더 봐 ㅜㅜ) -명령행 인수는 뭐고... / 도전실전 문제도 푸러야댐

비엔 Vien 2024. 2. 4. 19:48

2/4 - 절반만..오늘 좀 2학년 계획 좀 대충 짜야겠음 (내일 나머지)

 

오ㅏ 동적할당은 다 까먹어서 진짜 흑흑

책 설명 + 채찍피티의 힘을 빌려 이해해보도록 하쟈

 

동적할당

-프로그램 실행중에 저장공간을 할당하기

- 처리할 데이터 종류나 수를 장담할 수 없다면 

 

 

프로그램 실행 중 메모리를

동적할당 할때 : malloc

반환할 때 : free 

#include <stdlib.h>

 

 

malloc함수의 반화값이 NULL 포인터인지 반드시 확인하고 사용!(479p의 9행처럼)

-> NULL(0)은 메모리 부족을 뜻함(할당 실패)

 

exit 함수 :  어느경우든 프로그램 바로 종료 (예외상황이 발생해 프로그램 종료시 인수로 1을 주고 호출 ( exit(1) ))

 

malloc뒤에는 항상 free가 (사용끝난 저장공간은 반드시 반환)

 

malloc에서 (자료형 *) :  반환되는 주소를 '자료형'형 변수의 주소로 형변환 

(왜냐면 malloc함수의 원형이 void *malloc(unsigned int size); 거든 )

ex

pi = (int *) malloc(sizeof(int)); // 480페이지!!!

// pi : int형을 가리키는 포인터에 저장
// int *  : 반환된는 주소를 int형 변수의 주소로 형 변환
// malloc(sizeof(int)) : 저장 공간을 할당하고 (void *)형 반환

 



484~5p

calloc :  할당한 저장공간을 0으로 초기화

realloc : 크기 조절(재할당) -realloc함수는 첫번째 인자로 기존에 할당된 메모리의 포인터를 받고, 두번째 인자로 새로 할당할 메모리의 크기를 받음

 

 

489p  문제!!!

490은 pb랑 pc가 이해안돼서⬇️


2/9

 

strlen 함수는 null문자를 제외하고 문자열의 길이를 계산하므로 malloc 함수에 인수로 줄때  (char*)malloc(strlen(배열이름)+1)  처럼 1을 더해서 null 문자를 포함할 수 있도록 저장공간을 할당해야 함

 

와 너무 어려운데 여기 

 

문자열을 직접 출력할때 배열명은 그 값을 바꿀수 없으므로, str[i]와 같이 배열 표현을 사용하거나 *(str+i)처럼 정수를 더하면서 각 문자열을 출력할 수 밖에 없다.

그러나 배열명을 포인터에 저장하면 포인터 자신의 값을 바꿀 수 있으므로 매개변수를 하나씩 증가시키면서 문자열을 출력 가능

 

 

16-2 1번..2번...

 

3번은 명령행 인수를 알고나서....