happy coding

[c] 구조체의 활용 본문

self study/언어의 기본부터

[c] 구조체의 활용

yeoonii 2022. 11. 27. 00:42
TCP school을 보고 정리한 내용입니다.

함수와 구조체

C언어에서 함수를 호출할 때 전달되는 인수나, 함수가 종료될 때 반환되는 반환값으로 구조체를 사용할 수 있다. 그 방식은 기본 타입과 완전히 같으며, 구조체를 가리키는 포인터나 구조체의 한 멤버 변수만을 사용할 수도 있다.

구조체의 멤버 변수를 인수로 전달하는 방식은 함수가 원본 구조체의 복사본을 가지로 작업하므로 안전하다는 장점을 가지고 있다.

구조체 포인터를 인수로 직접 전달하는 방식은 구조체의 복사본이 아닌 주소 하나만을 전달하므로 처리가 빠르지만 호출된 함수에서 원본 구조체에 직접 접근하므로 원본 데이터의 보호 측면에서는 매우 위험하다. 따라서 const 키워드를 사용하여 함수에 전달된 인수를 함수 내에서는 직접 수정할 수 없도록 하는 것이 좋다.

구조체를 사용하면 여러 개의 데이터를 한 번에 반환할 수 있다.

중첩된 구조체

구조체를 정의할 때 멤버 변수로 또 다른 구조체를 포함할 수 있다.

구조체의 크기

일반적으로 구조체의 크기는 멤버 변수들의 크기에 따라 결정된다. 하지만 구조체의 크기가 언제나 멤버 변수들의 크기 총합과 일치하는 것은 아니다. 

바이트 패딩(byte padding)

구조체를 메모리에 할당할 때 컴파일러는 프로그램의 속도 향상을 위해 바이트 패딩이라는 규칙을 이용한다. 구조체는 다양한 크기의 타입을 멤버 변수로 가질 수 있는 타입인데, 컴파일러는 메모리의 접근을 쉽게 하기 위해 크기가 가장 큰 멤버 변수를 기준으로 모든 멤버 변수의 메모리 크기를 맞추게 되는 현상을 바이트 패딩이라고 하며, 이때 추가되는 바이트를 패딩 바이트라고 한다. 

'self study > 언어의 기본부터' 카테고리의 다른 글

[c] 콘솔 입출력  (0) 2022.11.27
[c] 공용체와 열거체  (0) 2022.11.27
[c] 포인터와 구조체  (0) 2022.11.26
[c] 구조체의 기본  (0) 2022.11.26
[c] 문자와 문자열  (0) 2022.11.25
Comments