목차
C언어 포인터 / 박은종 쌤의 포인터 강의 6~7
- 구조체와 포인터 - 1
- 구조체와 포인터 - 2
C언어 포인터 / 박은종 쌤의 포인터 강의 6~7
구조체와 포인터 - 1
헤더 파일 선언
해당 헤더파일에 각종 헤더를 include 해주면 이 헤더만 가져오면 그 안에 include 된 모든 헤더 파일을 사용할 수 있다.
strcpy로 해당 구조체의 요소 값을 변경시킨다
(strcpy 사용을 위해 헤더 파일에 string.h를 추가해준다)
sturct person lee를 선언하는 순간
해당 구조체의 메모리 요소만큼 메모리를 잡게 된다
구조체 포인터 선언 struct person* leePtr;
해당 포인터 값은 4바이트의 메모리를 가진다
typedef int INT; 를 해줬기 때문에
INT num = 10; 형태로 선언해줄 수 있다.
(INT의 의미는 int)
구조체와 포인터 - 2
변수안의 변수는 stack 메모리에 할당하게 된다.
malloc의 경우는 heap이라는 동적 메모리에 잡히게 된다.
함수가 끝나더라도 남아있기 때문에 free로 꼭 지워줘야 한다.
void printStruct함수는 포인터를 사용해, 해당 구조체를 출력하는 함수이다.
주소만 넘기지 않고 아래처럼 넘기면
printStruct(lee);
printStruct(Person p);
형태로 받게 되면 copy 하여 할당되기 때문에, 새롭게 메모리를 잡게 된다.
메모리 낭비를 줄이기 위해 &lee 해당 주소 값을 넘겨줘
Person *p 포인터 형태로 받게 한다.
배열을 선언할 때
아래처럼 포인터 형태로도 선언이 가능하다.
특징으로는 55줄을 보면, 메모리 allocation 이후 arr을 free 해주려고 하면 error가 발생하게 된다.
왜냐하면 arr++하여서 해당 포인터를 옮겨 주었기 때문이다.
이런 경우를 위해, malloc에 할당하고 나서 해당 위치에 가리키고 있는 부분을 미리 포인터로
해당 배열의 시작점의 주소를 받아와야 한다.
(int *temp부분)
해당 배열을 모두 사용하고 나서
*temp가 가리키고 있는 부분을 free 해준다.
'Programming > C language' 카테고리의 다른 글
[C] 포인터와 배열 및 실습 [박은종 쌤의 포인터 강의] (0) | 2021.11.19 |
---|