목차
- 구조체 변수와 함수
- 구조체 변수와 포인터
- 구조체 매개 변수 vs 구조체 포인터 매개 변수
- 구조체 변수와 함수의 인자
- 구조체가 쓰이는 C 표준 라이브러리 함수
1. 구조체 변수와 함수
✓ stud_swap() 함수
구조체 변수 값 swap을 위해 만든 함수인데 swap이 되지 않는다.
그 이유는 무엇일까?
Call by Value
- scalar 형 자료형과 같이 구조체 변수 역시 매개변수로 값이 복사되어 감
- 매개변수는 호출 시 사용한 변수와 별개이며 변화가 반영되지 않는다.
2. 구조체 변수와 포인터
구조체 자료형에 대한 포인터가 가능하다.
구조체 포인터에서 구조체 멤버를 접근하려면
->: 구조체 포인터의 멤버 변수 접근 연산자
3. 구조체 매개 변수 vs 구조체 포인터 매개 변수
배열의 경우
- 대입 연산을 적용할 수 없으며
- 함수 매개변수일 때 배열이 복사되는 것이 아니라 배열의 주소가 복사됨을 배웠다
구조체의 경우
- 대입 연산을 적용할 수 있고
- 함수 매개변수일 때 값이 복사되는 것을 확인하였다
stud_printx() vs stud_print()
- stud_printx()는 구조체 자체를 매개 변수로 하여 전체 값의 복사가 발생
- 복사하는 정보의 양: 구조체의 크기 만큼
- stud_print()는 구조체 포인터를 매개 변수로 하여 주소 값의 복사가 발생
- 복사하는 정보의 양: 포인터 크기 만큼
- 메모리 복사 부하를 줄이려면 포인터 매개 변수를 사용하는 것이 바람직하다
4. 구조체 변수와 함수의 인자
① C언어에서 구조체 변수와 배열 변수의 대입 및 함수 인자 처리 과정에 차이가 있다.
② 메모리 복사는 CPU의 효율을 떨어뜨리는 연산이다
③ 구조체 변수를 인자로 할 경우 "구조체 복사"가 좋을지 "구조체 포인터" 사용이 좋을지 생각한다.
- 포인터의 경우 메모리 복사 부하를 최소하는 장점이 있다
- 다만 함수 내에서 원하지 않는 구조체의 내용 변경 등의 Side Effect가 발생할 수도 있다
5. 구조체에 쓰이는 C 표준 라이브러리 함수
요약
'Language Study > C' 카테고리의 다른 글
[C/C++] 10 - 01 메모리 동적 할당 (1) | 2022.12.06 |
---|---|
[C/C++] 09 - 03 구조체 배열과 포인터 (0) | 2022.12.03 |
[C/C++] 09 - 01 구조체 기초 (0) | 2022.11.23 |
[C/C++] 08 - 02 배열, 문자열과 포인터 (0) | 2022.11.21 |
[C/C++] 08 - 01 POINTER 기초 (0) | 2022.11.09 |