여기부터는 내가 잘 모르는 문법이다 ㅠㅠ
학부때도 여기까지 안나가봐서..
일단 강의들은거로만 쓰자면
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 |