[음악 재생] DOUG 로이드 : OK. 우리는 정수로 근무했습니다, 우리는 문자로 근무했습니다, 우리는 수레 근무했습니다, 복식, 문자열 및 bools. 우리는 많은 꽤 모두 소진했습니다 [들림] 유형의 따라서 우리 모두가 사용할 수 있었다. 하지만 지금 우리는 더 많은 일을하고 싶다. 우리는 어떻게해야합니까? 우리는 어떻게 다른 데이터 유형을 만들려면 어떻게해야합니까? 우리는 구조를 사용하여 수행 할 수 있습니다. 그래서 구조는 우리가 통합 할 수 있도록 다른 유형의 변수 하나의 새로운 변수 타입으로, 이는 우리가 자신의 형 이름을 지정할 수 있습니다. 이것은 정말 강하다 일이, 할 수 있기를 우리는 그룹 지금 할 수 있기 때문에 상이한 데이터 유형의 요소 함께 논리적 연결이 있는지 확인하십시오. 우리는이 작업을 수행 할 수있었습니다 종류의 배열과 함께, 오른쪽? 우리가 할 수있는 그룹 변수 같은 타입의 함께 큰 단위 메모리 배열의. 그러나 우리는 혼합 할 수 없었다 함께 최대 다른 데이터 유형. 우리는, 정수 쌍, 말할 수 없다 그리고 문자 및 모든 더블 같은 일 및 하나의 단위 있음을 호출합니다. 그러나와 구조, 또는 자주, 구조체로 지칭 우리가 실제로 할 수 있습니다. 그래서 구조는 일종의 의 슈퍼 변수 등을들 수있다. 그것은 포함 된 변수의 그 안에 다른 변수. 그래서 여기의 예 매우 간단한 구조. 이 구문이 보일 것이다 것입니다 자동차의 구조를 만드는 것을 좋아합니다. 자, 여기 구문을 통해 가자. 구조체, 즉이다 표시 키워드 내가 여기에 새로운 데이터 유형을 만드는거야 그. 특히, 데이터 형식의 이름이고 우리가 볼 수 있습니다로, 구조체 자동차가 될 것. 하지만이 팁의 일종이다 컴파일러에 떨어져 그이 변수의 그룹으로 그런 것입니다 동일한 유형의 일부로 간주 될 분. 자동차, 구조의 단지 이름. 다시, 여기에서 데이터 유형이가는 구조체 자동차뿐 아니라 자동차합니다. 하지만 당신은 different--이있는 경우 여러 구조체를 만들 경우 같은 프로그램에서, 당신은 필요 구조체와 구조체 구분합니다. 그래서 구조체 자동차, 나 또한있을 수 있습니다 구조체 학생, 예를 들어, 같은 프로그램에서. 중괄호 안에있는 소위 모든 필드, 또는 구조 부재. 그래서 몇 가지 무엇인가 자동차에 내재되어 있는지? 음, 보통 일년에 있음 모델명 및 번호판 일반적으로이 주행 거리계 그것에 마일의 일부 번호, 아마 엔진 크기. 당신이 볼 수 있듯이, 나는 최대 혼합 해요 정수와 문자와 복식. 그들은 모두가 될거야 이 새로운 데이터 유형의 일부입니다. 마지막으로, 마지막 것은 내가해야 할, 이 작은 세미콜론을 잊지 마세요 끝에. 우리가 구조를 정의 마친 후, 우리는 마지막에 세미콜론을 넣어해야합니다. 그것은 매우 일반적인 구문이다 실수 기능이 있기 때문에, 예를 들어, 당신은 단지 것 열린 중괄호, 가까운 중괄호. 당신은 세미콜론을 넣지 마십시오 함수 정의의 끝. 이 함수처럼 보인다 정의하지만, 그렇지 않은, 그래서 세미콜론이 그냥 알림 있음을 때문에, 거기 둘 필요 컴파일러하지, 그렇지 않은 것 그것으로 무엇을 알고있다. 그것은 매우 일반적인 오류이다 실수로 만들려면 때 먼저 구조를 정의하고 있습니다. 그래. 그래서 우리는 일반적으로 우리의 구조를 정의 우리 프로그램의 가장 상단에 그들은 아마도려고하고 있기 때문에 여러 기능에 의해 사용된다. 우리를 정의하지 않으 함수의 내부 구조체, 우리는을 only-- 수 있기 때문에 구조의 범위 정말로 해당 기능의 내부에 존재한다. 우리는 아마 구조를 정의 할 것 그래서 우리는 여러 기능에서 사용할 수 있습니다, 혹은 다수의 함께 연결되어 파일 우리의 하나의 프로그램을 만들 수 있습니다. 때때로 대신 구조를 정의 당신은 넣어 매우 상단에 파운드는 포함하고 파운드를 정의 예를 들어, 당신이 그들을 넣어 수 있습니다 별도의 도트 H 파일, 다음되는 당신을 파운드는 자신을 포함한다. 그래서 우리는 구조를 가지고 있지만, 지금 우리는 그들 안에 얻을 필요가있다. 우리는 어떻게 안에받을 수 있나요 액세스 할 수있는 구조 그 하위 변수,이 변수 그 구조 내부에 존재 하는가? 음, 우리는라는 뭔가를 우리를 수있는 점 연산자, 구조의 필드를 액세스 할 수 있습니다. 예를 들어, 그래서, 내가 선언 한 가정 해 봅시다 데이터 구조 내 어딘가 입력 내 프로그램의 상단에, 또는 아마도에 나는 파운드를했습니다 도트 H 파일이 포함되어 있습니다. 나는 그 새를 만들려면 해당 데이터 유형의 변수는, 내가 말할 수있는 구조체 차, 내 차, 세미콜론. 나는 INT 말할 수 것처럼 X, 또는 문자열 이름 세미콜론. 여기서 데이터 타입은, 구조체 차다 변수의 이름은, 내 차다 그리고, 나는에 도트 연산자를 사용할 수 있습니다 내 차의 다양한 분야에 액세스 할 수 있습니다. 그래서 난 내 차를 말할 수있다 도트 년 2011 같습니다. 그것은 완벽하게 괜찮아요. 당신이 기억하는 경우 년,,로 정의 하였다 이 구조체 자동차의 내부 정수 필드 데이터 유형입니다. 구조체 자동차 데이터 그래서 어떤 변수 유형, 같은 내 차, 나는 내 차를 말할 수있다 점 년에 해당하고 지정 그것은 어떤 정수 값 2011. 내 차 도트 판은 CS50 같습니다. 내 카드 점의 주행 거리계 50505 세미콜​​론 같습니다. 이들 모두는 완벽하게 정상적으로 및 그건 우리는 액세스 방법 필드 구조. 구조는하지만, 필요하지 않습니다 스택에 생성합니다. 그냥 우리는 다른 변수를 좋아한다 동적으로 할당 할 수 있습니다. 우리는 프로그램이있는 경우 그 수도 많은 구조를 생성 할, 우리는 얼마나 많은 모르겠어요 우리는 필요 해요 우리는 동적를 필요 그 구조를 할당 우리의 프로그램으로 실행됩니다. 그리고 우리는 액세스 거라면, 그래서 그 상황에서 구조 분야, 우리는 첫 번째 역 참조 할 필요가 리콜 구조체 포인터 그리고 우리 한 번 역 참조 포인터, 우리는 필드에 액세스 할 수 있습니다. 우리는 단지이있는 경우 구조체의 포인터, 우리는 단지 포인터 도트 필드를 말할 수 없다 이름을 우리가 원하는 것을 얻을. 역 참조하는 추가 단계가있다. 그래서 그런 말을하자 대신 previous--의 바로 앞의 예처럼, 대신 그것을 선언 스택에, 구조체 차, 내 자동차, 세미콜론, 나는, 구조체의 차를 말한다 스타, 포인터 구조체 차, 내 차라고 구조체 자동차의 malloc에​​ 크기를 동일합니다. 얼마나 많은 우리의 크기는 알아낼 것이다 새로운 데이터 유형이 차지하는 바이트. 당신은 반드시 만 사용할 필요가 없습니다 폭, INT, 또는 문자, 또는, 크기 내장 데이터 유형. 컴파일러는 똑똑 얼마나 많은 바이트를 알아 내기 위해 새로운 구조가 필요합니다. 그래서 나는 나 자신에게 메모리의 단위를 malloc에 구조체의 차를 저장하기에 충분히 큰, 나는 다시 포인터를 얻을 메모리의 블록에, 그 포인터가 내 차에 할당됩니다. 지금, 나는 액세스하려는 경우 내 차의 분야, 내가 먼저 내 차를 역 참조 사용 참조 연산자, 스타 우리는 포인터에서 본 적이 있는지 비디오, 나는 역 참조 후, 그때에 도트 연산자를 사용할 수 있습니다 내 차의 다양한 분야에 액세스 할 수 있습니다. 올해 2011 동일 점 내 차를 스타. 그 효과를 가질 것이다 우리는이 경우에 원하는, 우리는 동적으로했습니다 때문에 내 차를 할당. 그건 바로,하지만 가지 짜증나? 이제 2 단계의 과정이있다. 이제 우리는 dereference--해야 우리는 스타 연산자를 가지고, 그리고 우리는 도트​​ 연산자가 있습니다. 그리고 예상대로, 때문에 C 프로그래머는 짧은 방법을 사랑 일을하고,이 짧은 방법은이 작업을 수행 할 수 있습니다. 화살표라는 또 다른 운영자가있다, 이는이 과정이 훨씬 쉬워집니다. 화살표가 작동하는 방식입니다 그 첫 번째 역 참조 왼쪽 포인터 운영자의 측면, 다음, 후에는 역 참조하는 데 왼쪽 포인터 그것은 오른쪽에있는 필드에 액세스합니다. 그래서 이전에 우리는 이런 종류가 있었다 내 차,이 모든 물건을 점 스타 같은 거기에가는 많은이 있었다. 그러나 우리가 대신 할 수있는 것은이 항아리입니다 내 차 화살표 년 2011 같습니다. 다시 말하지만, 여기에 무슨 일이야? 첫째, 나는 내 차를 역 참조하고 있습니다. 어느 다시, 여기에 포인터입니다. 다음에, 거친 나는 내 차를 역 참조 다음 필드에 액세스 할 수 있습니다 년, 접시, 및 주행 거리계 단지 내가 할 수있는 등 처음 갖는 이전 내 차를 역 참조 사용하는 스타, 및 필드를 액세스하는 점. 그래서 당신은 당신이 구조를 가질 수있다 구조에 대한 포인터를 가질 수있다, 당신은 액세스 할 수있는 방법이 이러한 구조의 필드, 당신은 포인터에 있는지 여부 그들 또는 변수 자체. 점 또는 화살표에 따라 변수는 방법을 선언했다. 내가 더그 로이드 해요,이 CS50입니다.