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

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



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



구조체 포인터 자리에는 &(주소 연산자)를 사용해서 구조체 변수의 주소를 지정해도, 구조체 포인터를 직접 지정해주어도 됩니다.
이번에는 그전에 말했던 중괄호를 사용해서 초기화할 수 없다던 동적할당된 메모리에 값을 설정해보겠습니다.


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





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



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

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




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