일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- C언어 #핵심정리
- C언어 # 부록
- C언어 # 핵심 정리
- C++ 언어 # 핵심정리
- MySQL #핵심정리
- HTML #핵심정리
- C언어 #부록
- C++ 언어 # 핵심 정리
- Bandit
- Hacking #Baic
- PHP #핵심정리
- shell_script
- C++ 언어 #핵심정리
- Today
- Total
cCcode
C Language [핵심정리] - 29 본문
1. 구조체와 메모리 활용
구조체도 결국 메모리 공간을 차지하게 되므로 메모리 관련 함수 또한 사용가능합니다. 저희가 변수를 초기화하려면 =(할당 연산자)로 0이라는 값을 할당해주면 끝나는 간단한 문제였습니다. 하지만 구조체의 멤버들을 0으로 초기화 하려면 다음과 같이 .을 사용해 각 멤버에 접근한 후 0을 저장해야 합니다. 꽤나 번거롭습니다.
다른 방법으로는 구조체 변수를 선언할 때 { 0, }처럼 중괄호를 사용하여 구조체 변수의 모든 내용을 0으로 초기화할 수 있지만, 변수에서만 사용할 수 있고 malloc 함수로 메모리를 할당한 변수에는 사용할 수 없다는 단점이 없습니다.
일일이 멤버에 값을 설정하거나 중괄호(선언과 동시에 할당할 경우에만 사용가능)를 사용하지 않고, memset 함수를 통해 구조체 변수나 메모리의 내용을 한번에 설정할 수 있습니다.
구조체 포인터 자리에는 &(주소 연산자)를 사용해서 구조체 변수의 주소를 지정해도, 구조체 포인터를 직접 지정해주어도 됩니다.
이번에는 그전에 말했던 중괄호를 사용해서 초기화할 수 없다던 동적할당된 메모리에 값을 설정해보겠습니다.
여러분 구조체 포인터는 화살표 연산자로 값에 접근합니다. 잊지마세요!
우리는 변수를 생성하는 과정을 간략히 만들기 위해 구조체를 사용했죠. 하지만 구조체를 사용한다고해서 번거로운 상황이 생기지 않는 건 아닙니다. 예를 들어 이미 생성해 값을 저장한 구조체나 메모리를 다른 곳에 복사해 사용하는 경우가 빈번합니다. 이 때는 memcpy 함수를 사용해서 메모리의 내용을 다른 곳으로 복사할 수 있습니다. 함수명은 memory copy에서 가져왔습니다. (<string.h>파일에 선언되어 있습니다.)
2. 구조체 배열 사용
일반적으로 배열(변수들의 모음)을 선언하는 것처럼 구조체 변수 또한 일종의 변수로 구조체 변수의 모음 즉, 구조체 배열을 사용할 수 있습니다.
구조체 배열을 선언하면서 초기화하려면 { }(중괄호)안에 중괄호를 사용합니다.
구조체 요소가 한번에 들어있는 배열이 아닌 요소마다 메모리를 할당해야하는 경우가 있을 수도 있습니다. 이 때는 구조체 포인터 배열을 만든후 malloc 함수로 각 요소에 메모리를 할당해줘야 합니다.
오늘은 그동안 밀린 진도를 나가려고 조금 많이 했습니다. 포인터와 구조체, 배열을 동시에 다뤄 조금 어려우셨을 수도 있었을텐데 수고 많으셨습니다. 오늘은 여기까지입니다.
'C Language Basic' 카테고리의 다른 글
C Language [핵심정리] - 31 (1) | 2021.06.21 |
---|---|
[부록] 산술 연산 계산기 (완성본) (0) | 2021.06.19 |
C Language [핵심정리] - 28 (0) | 2021.06.15 |
C Language [핵심정리] - 27(수정) (0) | 2021.06.11 |
[부록] 문자열 함수들을 이용한 간단한 프로그램(완성본) (0) | 2021.06.09 |