cCcode

C Language [핵심정리] - 29 본문

C Language Basic

C Language [핵심정리] - 29

cCcode 2021. 6. 15. 22:58

1. 구조체와 메모리 활용

구조체도 결국 메모리 공간을 차지하게 되므로 메모리 관련 함수 또한 사용가능합니다. 저희가 변수초기화하려면 =(할당 연산자)로 0이라는 값을 할당해주면 끝나는 간단한 문제였습니다. 하지만 구조체의 멤버들을 0으로 초기화 하려면 다음과 같이 .을 사용해 각 멤버에 접근한 후 0을 저장해야 합니다. 꽤나 번거롭습니다.

멤버를 0으로 초기화

다른 방법으로는 구조체 변수를 선언할 때 { 0, }처럼 중괄호를 사용하여 구조체 변수의 모든 내용을 0으로 초기화할 수 있지만, 변수에서만 사용할 수 있고 malloc 함수로 메모리를 할당한 변수에는 사용할 수 없다는 단점이 없습니다.

구조체 변수 초기화
구조체 변수 초기화
결과

일일이 멤버에 을 설정하거나 중괄호(선언과 동시에 할당할 경우에만 사용가능)를 사용하지 않고, memset 함수를 통해 구조체 변수메모리의 내용을 한번에 설정할 수 있습니다.

memset 함수 사용
memset 함수 사용
결과

구조체 포인터 자리에는 &(주소 연산자)를 사용해서 구조체 변수의 주소를 지정해도, 구조체 포인터를 직접 지정해주어도 됩니다.  

이번에는 그전에 말했던 중괄호를 사용해서 초기화할 수 없다던 동적할당메모리을 설정해보겠습니다.

수정 부분
결과

여러분 구조체 포인터 화살표 연산자로 값에 접근합니다. 잊지마세요!

 

우리는 변수를 생성하는 과정을 간략히 만들기 위해 구조체를 사용했죠. 하지만 구조체를 사용한다고해서 번거로운 상황이 생기지 않는 건 아닙니다. 예를 들어 이미 생성해 을 저장한 구조체메모리를 다른 곳에 복사해 사용하는 경우가 빈번합니다. 이 때는 memcpy 함수를 사용해서 메모리의 내용을 다른 곳으로 복사할 수 있습니다. 함수명은 memory copy에서 가져왔습니다. (<string.h>파일에 선언되어 있습니다.)

memcpy 함수 사용
메모리 복사(일반 구조체 변수)
결과

 

메모리 복사(구조체 포인터)
결과

 

2. 구조체 배열 사용

일반적으로 배열(변수들의 모음)선언하는 것처럼 구조체 변수 또한 일종의 변수구조체 변수의 모음 즉, 구조체 배열을 사용할 수 있습니다.

구조체 배열
구조체 배열 사용
결과

 

구조체 배열 선언하면서 초기화하려면 { }(중괄호)안에 중괄호를 사용합니다.

구조체 배열 선언과 동시에 초기화

구조체 요소가 한번에 들어있는 배열이 아닌 요소마다 메모리를 할당해야하는 경우가 있을 수도 있습니다. 이 때는 구조체 포인터 배열을 만든후 malloc 함수로 각 요소에 메모리를 할당해줘야 합니다.

구조체 포인터 배열 
포인터 배열 - 1
포인터 배열 - 2
포인터 배열 - 3 

오늘은 그동안 밀린 진도를 나가려고 조금 많이 했습니다. 포인터와 구조체, 배열을 동시에 다뤄 조금 어려우셨을 수도 있었을텐데 수고 많으셨습니다. 오늘은 여기까지입니다.

Comments