함수의 인수로 구조체를 사용할 수 있습니다.
함수에 구조체 형이 인수로 들어가므로 오류가 나지 않도록 구조체를 먼저 정의해줍니다.
구조체 변수를 인수로 넘기는데 이때, 값이 복사되어 함수로 넘어갑니다.
하지만, 구조체의 크기가 커지면 커질수록, 복사해야 하는 값이 많아지기 때문에 인수를 전달할 때의 속도는 느려질 수 있습니다.
따라서 복사하지 않고, 포인터로 주소 값만 지정해준 뒤 직접 값에 접근하는 방식으로 값을 다루면 속도가 향상될 수 있습니다.
왜 입력을 받을 때는 멤버 앞에 &를 사용하는데 출력을 할 때는 멤버 이름만 적을까?
포인터를 사용해 인수를 전달하기에 앞서 인수를 포인터로 전달하면 기존의 멤버 접근 방식과 다른 표현을 써야합니다. 포인터로 전달했을 때 멤버에 접근하는 법을 알아야 알아보겠습니다.
화살표 연산자
포인터에서 멤버로 접근하는 경우 도트 연산자 대신 ->(화살표 연산자)를 사용합니다.
포인터로 구조체 인수 전달
포인터로 인수를 전달할 때는 실인수를 "&구조체 변수"로 전달합니다.
저희는 같은 토끼라도 하나만 있는게 아니라 토끼1, 토끼2, 토끼3.... 이런 식으로 여러 마리의 토끼를 다루고 싶을 수도 있습니다.
이렇게 같은 타입의 객체를 여러 개 다룰 때는 배열을 사용해서 나타낼 수 있습니다.
구조체 배열
이렇게 배열을 이용하면 같은 이름의 구조체 변수를 여러 개 사용할 수 있습니다.
전에 구조체와 포인터를 사용해서 리스트 구조를 만들 수 있을 것 같다는 생각을 했었다고 했습니다.
지금부터는 리스트 구조를 만들어 보도록 하겠습니다.
먼저, 구조체는 구조체 안에 같은 형 포인터를 멤버로 만들 수 있습니다.
이렇게 만든 멤버에는 다른 구조체의 주소를 대입해서 가리키게 할 수 있습니다.
리스트 구조
for문을 돌면서 코드를 실행하고 나면 다음 주소를 가리키는 형식으로 아주 간단한 순서가 있는 리스트를 만들었습니다. 이와 비슷하게 기준에 따라 데이터를 추가하고, 제거하고, 읽어오는 코드를 추가하면 완전한 리스트가 될 것입니다.
NULL
null은 표준 라이브러릴에 정의된 매크로이며, "아무것도 없다"는 것을 나타냅니다. null을 깊게 이해하려면 많은 내용들이 있겠지만, 간단하게만 설명하면 0이 아닙니다. 0은 값은 0이지만 0이라는 값이 존재(有)하는 상태이고, NULL은 값이 없는 상태인 無입니다.
참고
www.youtube.com/watch?v=N08BSA3rwhU&t=394s
NULL 이란?
NULL 이란? NULL은 미확인 값이나 아직 적용되지 않은 값을의미한다. 예를 들어, 학생 테이블에서 ...
blog.naver.com
포인터를 구조체 형 선언에 멤버로 넣지 않고도 리스트를 만들 수 있을까요?
리스트의 핵심기능은 포인터입니다. 포인터를 사용해 메모리의 어느 위치에 있든 접근할 수 있습니다.
멤버로 포인터를 포함하지 않고 다음 요소의 주소를 지정하려면 다른 무언가로 주소를 결정해 주어야 합니다.
21.04.26 현재로서는 멤버로 포인터를 쓰지 않고 다음 요소의 주소를 지정할 방법이 떠오르지 않습니다. 당장 찾아보지 않고 계속 고민해 보도록 하겠습니다.
'C' 카테고리의 다른 글
[12] 열거형(enum) (0) | 2021.04.27 |
---|---|
[11] 공용체 (0) | 2021.04.26 |
[9] 구조체 표기방법과 크기 (0) | 2021.04.25 |
[8] 구조체 (0) | 2021.04.24 |
[7] 함수 포인터 (0) | 2021.04.24 |