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