본문 바로가기

C언어

C언어 동적 메모리 할당

반응형

 

 

여기부터는 내가 잘 모르는 문법이다 ㅠㅠ

 

학부때도 여기까지 안나가봐서..

 

일단 강의들은거로만 쓰자면

 

pi = (int *)malloc(sizeof(int)); 여기서 (int *)이 형변환이다

 

malloc은 메모리에 할당할 수 있게 하는건데 sizeof(int)여서 int = 4byte가 할당된다.

 

메모리에 4byte가 있다는 소리!!

 

그래서 *pi = 100; 을 넣고 free()로 반환을 시켜야한다.

 

그래서 free(pi); 가 있는 것 !

 

이게 C++에서는 new랑 delete로 바뀐다고 한다 ㅎㅎ 나는 C++을 미리 공부해가지고

 

malloc이랑 free가 뭔지 엄청 궁금해했었다.

 

고민 해결 휴우!!

 

 

#include <stdlib.h>은 동적 메모리 할당 malloc을 불러오기 위해서 사용한다!

 

음 하나씩 보자면 

 

char *pc = NULL;  , pc라는 포인터 문자 선언을 했다. 값은 NULL

 

그리고 pc는 100글자를 넣을 수 있는 동적 메모리가 할당대었다!

 

앞서 마찬가지로 실패하면 exit(1)을 한다.

 

for문으로 0~25까지 돌리고

 

*(pc + i ) = 'a' + i; 이렇게 쓰였는데

 

포인터의 개념이 쓰인다 ㅎㅎ 

 

쉽게 말해서 주소 0칸 -> 1칸 으로 이동하고 a , b 이렇게 계속 나타난다.

(이거는 포인터 개념을 알면 이해할 것이다)

 

그리고 마지막 i가 25까지 돌고 26에서 주소가 26칸까지 갔을텐데

 

여기서 동빈나님이 알려준 아스키 코드에서 0은 NULL을 의미하는걸 이용해서

 

*(pc + i) = 0; 을 해서 문자열 %s (NULL전까지 다 출력)로 출력한다.

 

 

궁금한 점은 단지 'a'+ i 와 매칭하려고 0도 아스키 코드로 되는건지 아니면 원래 0이 NULL인지? 

 

이거가 좀 헷갈리긴 한다. 문자열이면 알아서 끝에 \n이 들어가긴 할텐데 음...

 

궁금하구만!  (이거 알려줄 사람...)

 

그리고 free(pc)로 반환했다!!

 

 

 

그리고 이제 포인터 개념을 알면 쉽게 알 수 있다.

 

pi에 5개의 int형 데이터 (배열과 같은) 동적 메모리 할당시킨다.

 

그리고 0번지 ~ 4번지 100~500 넣고

 

for문 돌리면 

 

당연히 포인터 주소 따라가니까

 

 

이렇게 출력되는게 당연하다 ㅎㅎ

 

다음 강의가 동빈나 선생님의 C언어 기초 강의 마지막이다!!

 

아쟈아쟈 화팅~~~

 

 

반응형

'C언어' 카테고리의 다른 글

C언어 동적 메모리 할당(2)  (0) 2022.07.19
C언어 구조체의 활용(2)  (0) 2022.07.18
C언어 구조체  (0) 2022.07.18
C언어 문자열  (0) 2022.07.18
C언어 포인터  (0) 2022.07.18