C언어 구조체
구조체
- 구조체는 이미 정의된 서로 다른 자료형(int, char, double 등의 변수와 배열, 포인터, 구조체도 포함됨)들을 구성 요소로 하여 새로운 자료형을 만드는 것임
- 그룹핑하면 프로그래밍하기 편리한 자료들을 하나로 묶는 것임
- 배열을 사용하면 동일한 자료형 만을 한꺼번에 관리할 수 있지만 구조체는 상이한 자료형들을 한 묶음으로 관리할 수 있음
구조체 멤버의 참조와 연산
- 구조체 변수가 자신의 멤버(name, age, weight)를 접근하기 위해서는 "."이나 "->"을 사용
- 일반 구조체 변수의 멤버 접근
- 구조체_변수.멤버명;
- 점 연산자, 도트 연산자(dot operator), 지정 연산자, 멤버 지정 연산자(membership operator)
- 구조체 포인터 변수의 멤버 접근
구조체_포인터_변수->멤버명;
화살표 연산자(arrow operator), 간접 멤버 연산자(indirect membership operator)
클래스와 차이점?
- C++는 단 한가지만 다르다.
- 접근 제어 속성(public, private)을 생략했을때 구조체(struct)는 public이 기본, 클래스(class)는 private가 기본이다.
문득 든 생각
- 간접 참조 멤버 연산자를 사용하는 이유가 뭘까?
- 포인터를 사용하기 때문인건 사실
- 하지만 굳이 구분할 필요가 있을까?
- 구글링을 해본 결과는 아레와 같다.
- 실제로 멤버에 접근하는 연산자는 총 3개로 ":",".","->"가 있다.
- :는 클래스의 멤버거나 네임스페이스인 경우 "a::b"처럼 사용
- .은 그냥 구조체의 멤버인 경우 "a.b"처럼 사용
- ->는 원래 "(*a).b"의 약어라고 한다(!), 허나 추가로 유일하게 오버로딩을 가진다고 한다.
하나 찾으면 끝일줄 알았는데 일이 늘었다...추가로 오버로딩을 검색 해 봐야겠다
출처: https://stackoverflow.com/questions/4984600/when-do-i-use-a-dot-arrow-or-double-colon-to-refer-to-members-of-a-class-in-c
출처 : Smile Han C언어 강의 - Youtube