1 00:00:00,000 --> 00:00:02,395 >> [음악 재생] 2 00:00:02,395 --> 00:00:05,750 3 00:00:05,750 --> 00:00:06,506 >> DOUG 로이드 : OK. 4 00:00:06,506 --> 00:00:08,880 우리는 정수로 근무했습니다, 우리는 문자로 근무했습니다, 5 00:00:08,880 --> 00:00:11,930 우리는 수레 근무했습니다, 복식, 문자열 및 bools. 6 00:00:11,930 --> 00:00:14,870 우리는 많은 꽤 모두 소진했습니다 [들림] 유형의 7 00:00:14,870 --> 00:00:17,100 따라서 우리 모두가 사용할 수 있었다. 8 00:00:17,100 --> 00:00:19,430 하지만 지금 우리는 더 많은 일을하고 싶다. 9 00:00:19,430 --> 00:00:20,210 우리는 어떻게해야합니까? 10 00:00:20,210 --> 00:00:22,560 우리는 어떻게 다른 데이터 유형을 만들려면 어떻게해야합니까? 11 00:00:22,560 --> 00:00:26,130 우리는 구조를 사용하여 수행 할 수 있습니다. 12 00:00:26,130 --> 00:00:30,180 그래서 구조는 우리가 통합 할 수 있도록 다른 유형의 변수 13 00:00:30,180 --> 00:00:34,810 하나의 새로운 변수 타입으로, 이는 우리가 자신의 형 이름을 지정할 수 있습니다. 14 00:00:34,810 --> 00:00:37,570 이것은 정말 강하다 일이, 할 수 있기를 15 00:00:37,570 --> 00:00:40,900 우리는 그룹 지금 할 수 있기 때문에 상이한 데이터 유형의 요소 16 00:00:40,900 --> 00:00:43,910 함께 논리적 연결이 있는지 확인하십시오. 17 00:00:43,910 --> 00:00:46,440 우리는이 작업을 수행 할 수있었습니다 종류의 배열과 함께, 오른쪽? 18 00:00:46,440 --> 00:00:49,540 우리가 할 수있는 그룹 변수 같은 타입의 19 00:00:49,540 --> 00:00:53,410 함께 큰 단위 메모리 배열의. 20 00:00:53,410 --> 00:00:56,660 >> 그러나 우리는 혼합 할 수 없었다 함께 최대 다른 데이터 유형. 21 00:00:56,660 --> 00:01:02,610 우리는, 정수 쌍, 말할 수 없다 그리고 문자 및 모든 더블 22 00:01:02,610 --> 00:01:05,330 같은 일 및 하나의 단위 있음을 호출합니다. 23 00:01:05,330 --> 00:01:08,830 그러나와 구조, 또는 자주, 구조체로 지칭 24 00:01:08,830 --> 00:01:09,585 우리가 실제로 할 수 있습니다. 25 00:01:09,585 --> 00:01:12,370 그래서 구조는 일종의 의 슈퍼 변수 등을들 수있다. 26 00:01:12,370 --> 00:01:16,530 그것은 포함 된 변수의 그 안에 다른 변수. 27 00:01:16,530 --> 00:01:19,650 그래서 여기의 예 매우 간단한 구조. 28 00:01:19,650 --> 00:01:23,380 이 구문이 보일 것이다 것입니다 자동차의 구조를 만드는 것을 좋아합니다. 29 00:01:23,380 --> 00:01:25,250 자, 여기 구문을 통해 가자. 30 00:01:25,250 --> 00:01:27,400 구조체, 즉이다 표시 키워드 31 00:01:27,400 --> 00:01:30,270 내가 여기에 새로운 데이터 유형을 만드는거야 그. 32 00:01:30,270 --> 00:01:33,860 특히, 데이터 형식의 이름이고 우리가 볼 수 있습니다로, 구조체 자동차가 될 것. 33 00:01:33,860 --> 00:01:36,640 하지만이 팁의 일종이다 컴파일러에 떨어져 그이 34 00:01:36,640 --> 00:01:42,440 변수의 그룹으로 그런 것입니다 동일한 유형의 일부로 간주 될 35 00:01:42,440 --> 00:01:44,010 분. 36 00:01:44,010 --> 00:01:46,340 >> 자동차, 구조의 단지 이름. 37 00:01:46,340 --> 00:01:50,590 다시, 여기에서 데이터 유형이가는 구조체 자동차뿐 아니라 자동차합니다. 38 00:01:50,590 --> 00:01:53,060 하지만 당신은 different--이있는 경우 여러 구조체를 만들 경우 39 00:01:53,060 --> 00:01:56,950 같은 프로그램에서, 당신은 필요 구조체와 구조체 구분합니다. 40 00:01:56,950 --> 00:02:00,140 그래서 구조체 자동차, 나 또한있을 수 있습니다 구조체 학생, 예를 들어, 41 00:02:00,140 --> 00:02:01,790 같은 프로그램에서. 42 00:02:01,790 --> 00:02:05,980 중괄호 안에있는 소위 모든 필드, 43 00:02:05,980 --> 00:02:07,954 또는 구조 부재. 44 00:02:07,954 --> 00:02:10,370 그래서 몇 가지 무엇인가 자동차에 내재되어 있는지? 45 00:02:10,370 --> 00:02:15,270 음, 보통 일년에 있음 모델명 및 번호판 46 00:02:15,270 --> 00:02:18,000 일반적으로이 주행 거리계 그것에 마일의 일부 번호, 47 00:02:18,000 --> 00:02:19,225 아마 엔진 크기. 48 00:02:19,225 --> 00:02:23,570 당신이 볼 수 있듯이, 나는 최대 혼합 해요 정수와 문자와 복식. 49 00:02:23,570 --> 00:02:26,420 그들은 모두가 될거야 이 새로운 데이터 유형의 일부입니다. 50 00:02:26,420 --> 00:02:29,750 >> 마지막으로, 마지막 것은 내가해야 할, 이 작은 세미콜론을 잊지 마세요 51 00:02:29,750 --> 00:02:30,290 끝에. 52 00:02:30,290 --> 00:02:34,380 우리가 구조를 정의 마친 후, 우리는 마지막에 세미콜론을 넣어해야합니다. 53 00:02:34,380 --> 00:02:37,325 그것은 매우 일반적인 구문이다 실수 기능이 있기 때문에, 54 00:02:37,325 --> 00:02:40,200 예를 들어, 당신은 단지 것 열린 중괄호, 가까운 중괄호. 55 00:02:40,200 --> 00:02:42,950 당신은 세미콜론을 넣지 마십시오 함수 정의의 끝. 56 00:02:42,950 --> 00:02:46,430 이 함수처럼 보인다 정의하지만, 그렇지 않은, 57 00:02:46,430 --> 00:02:49,653 그래서 세미콜론이 그냥 알림 있음을 58 00:02:49,653 --> 00:02:52,440 때문에, 거기 둘 필요 컴파일러하지, 그렇지 않은 것 59 00:02:52,440 --> 00:02:53,510 그것으로 무엇을 알고있다. 60 00:02:53,510 --> 00:02:56,160 그것은 매우 일반적인 오류이다 실수로 만들려면 61 00:02:56,160 --> 00:02:58,570 때 먼저 구조를 정의하고 있습니다. 62 00:02:58,570 --> 00:02:59,500 >> 그래. 63 00:02:59,500 --> 00:03:02,824 그래서 우리는 일반적으로 우리의 구조를 정의 우리 프로그램의 가장 상단에 64 00:03:02,824 --> 00:03:05,490 그들은 아마도려고하고 있기 때문에 여러 기능에 의해 사용된다. 65 00:03:05,490 --> 00:03:08,850 우리를 정의하지 않으 함수의 내부 구조체, 66 00:03:08,850 --> 00:03:12,110 우리는을 only-- 수 있기 때문에 구조의 범위 정말로 67 00:03:12,110 --> 00:03:13,790 해당 기능의 내부에 존재한다. 68 00:03:13,790 --> 00:03:17,450 우리는 아마 구조를 정의 할 것 그래서 우리는 여러 기능에서 사용할 수 있습니다, 69 00:03:17,450 --> 00:03:20,670 혹은 다수의 함께 연결되어 파일 70 00:03:20,670 --> 00:03:22,920 우리의 하나의 프로그램을 만들 수 있습니다. 71 00:03:22,920 --> 00:03:24,920 때때로 대신 구조를 정의 72 00:03:24,920 --> 00:03:27,961 당신은 넣어 매우 상단에 파운드는 포함하고 파운드를 정의 73 00:03:27,961 --> 00:03:32,080 예를 들어, 당신이 그들을 넣어 수 있습니다 별도의 도트 H 파일, 다음되는 당신을 74 00:03:32,080 --> 00:03:35,020 파운드는 자신을 포함한다. 75 00:03:35,020 --> 00:03:37,620 >> 그래서 우리는 구조를 가지고 있지만, 지금 우리는 그들 안에 얻을 필요가있다. 76 00:03:37,620 --> 00:03:39,800 우리는 어떻게 안에받을 수 있나요 액세스 할 수있는 구조 77 00:03:39,800 --> 00:03:43,530 그 하위 변수,이 변수 그 구조 내부에 존재 하는가? 78 00:03:43,530 --> 00:03:46,810 음, 우리는라는 뭔가를 우리를 수있는 점 연산자, 79 00:03:46,810 --> 00:03:50,990 구조의 필드를 액세스 할 수 있습니다. 80 00:03:50,990 --> 00:03:55,490 예를 들어, 그래서, 내가 선언 한 가정 해 봅시다 데이터 구조 내 어딘가 입력 81 00:03:55,490 --> 00:03:59,020 내 프로그램의 상단에, 또는 아마도에 나는 파운드를했습니다 도트 H 파일이 포함되어 있습니다. 82 00:03:59,020 --> 00:04:03,360 나는 그 새를 만들려면 해당 데이터 유형의 변수는, 내가 말할 수있는 83 00:04:03,360 --> 00:04:06,260 구조체 차, 내 차, 세미콜론. 84 00:04:06,260 --> 00:04:11,580 나는 INT 말할 수 것처럼 X, 또는 문자열 이름 세미콜론. 85 00:04:11,580 --> 00:04:18,100 >> 여기서 데이터 타입은, 구조체 차다 변수의 이름은, 내 차다 86 00:04:18,100 --> 00:04:23,770 그리고, 나는에 도트 연산자를 사용할 수 있습니다 내 차의 다양한 분야에 액세스 할 수 있습니다. 87 00:04:23,770 --> 00:04:27,494 그래서 난 내 차를 말할 수있다 도트 년 2011 같습니다. 88 00:04:27,494 --> 00:04:28,410 그것은 완벽하게 괜찮아요. 89 00:04:28,410 --> 00:04:34,210 당신이 기억하는 경우 년,,로 정의 하였다 이 구조체 자동차의 내부 정수 필드 90 00:04:34,210 --> 00:04:35,200 데이터 유형입니다. 91 00:04:35,200 --> 00:04:39,966 구조체 자동차 데이터 그래서 어떤 변수 유형, 같은 내 차, 나는 내 차를 말할 수있다 92 00:04:39,966 --> 00:04:44,030 점 년에 해당하고 지정 그것은 어떤 정수 값 2011. 93 00:04:44,030 --> 00:04:47,290 내 차 도트 판은 CS50 같습니다. 94 00:04:47,290 --> 00:04:51,180 내 카드 점의 주행 거리계 50505 세미콜​​론 같습니다. 95 00:04:51,180 --> 00:04:53,270 이들 모두는 완벽하게 정상적으로 및 그건 96 00:04:53,270 --> 00:04:57,802 우리는 액세스 방법 필드 구조. 97 00:04:57,802 --> 00:05:00,260 구조는하지만, 필요하지 않습니다 스택에 생성합니다. 98 00:05:00,260 --> 00:05:02,950 그냥 우리는 다른 변수를 좋아한다 동적으로 할당 할 수 있습니다. 99 00:05:02,950 --> 00:05:06,309 우리는 프로그램이있는 경우 그 수도 많은 구조를 생성 할, 100 00:05:06,309 --> 00:05:08,100 우리는 얼마나 많은 모르겠어요 우리는 필요 해요 101 00:05:08,100 --> 00:05:10,800 우리는 동적를 필요 그 구조를 할당 102 00:05:10,800 --> 00:05:12,960 우리의 프로그램으로 실행됩니다. 103 00:05:12,960 --> 00:05:16,600 그리고 우리는 액세스 거라면, 그래서 그 상황에서 구조 분야, 104 00:05:16,600 --> 00:05:20,660 우리는 첫 번째 역 참조 할 필요가 리콜 구조체 포인터 105 00:05:20,660 --> 00:05:24,810 그리고 우리 한 번 역 참조 포인터, 우리는 필드에 액세스 할 수 있습니다. 106 00:05:24,810 --> 00:05:26,830 우리는 단지이있는 경우 구조체의 포인터, 107 00:05:26,830 --> 00:05:32,120 우리는 단지 포인터 도트 필드를 말할 수 없다 이름을 우리가 원하는 것을 얻을. 108 00:05:32,120 --> 00:05:34,259 역 참조하는 추가 단계가있다. 109 00:05:34,259 --> 00:05:36,050 그래서 그런 말을하자 대신 previous--의 110 00:05:36,050 --> 00:05:38,770 바로 앞의 예처럼, 대신 그것을 선언 111 00:05:38,770 --> 00:05:43,680 스택에, 구조체 차, 내 자동차, 세미콜론, 나는, 구조체의 차를 말한다 112 00:05:43,680 --> 00:05:48,020 스타, 포인터 구조체 차, 내 차라고 113 00:05:48,020 --> 00:05:51,250 구조체 자동차의 malloc에​​ 크기를 동일합니다. 114 00:05:51,250 --> 00:05:54,950 얼마나 많은 우리의 크기는 알아낼 것이다 새로운 데이터 유형이 차지하는 바이트. 115 00:05:54,950 --> 00:05:58,570 당신은 반드시 만 사용할 필요가 없습니다 폭, INT, 또는 문자, 또는, 크기 116 00:05:58,570 --> 00:05:59,715 내장 데이터 유형. 117 00:05:59,715 --> 00:06:02,090 컴파일러는 똑똑 얼마나 많은 바이트를 알아 내기 위해 118 00:06:02,090 --> 00:06:04,170 새로운 구조가 필요합니다. 119 00:06:04,170 --> 00:06:09,610 그래서 나는 나 자신에게 메모리의 단위를 malloc에 구조체의 차를 저장하기에 충분히 큰, 120 00:06:09,610 --> 00:06:12,410 나는 다시 포인터를 얻을 메모리의 블록에, 121 00:06:12,410 --> 00:06:16,090 그 포인터가 내 차에 할당됩니다. 122 00:06:16,090 --> 00:06:18,050 >> 지금, 나는 액세스하려는 경우 내 차의 분야, 123 00:06:18,050 --> 00:06:22,615 내가 먼저 내 차를 역 참조 사용 참조 연산자, 스타 124 00:06:22,615 --> 00:06:26,620 우리는 포인터에서 본 적이 있는지 비디오, 나는 역 참조 후, 125 00:06:26,620 --> 00:06:32,200 그때에 도트 연산자를 사용할 수 있습니다 내 차의 다양한 분야에 액세스 할 수 있습니다. 126 00:06:32,200 --> 00:06:35,490 올해 2011 동일 점 내 차를 스타. 127 00:06:35,490 --> 00:06:38,480 그 효과를 가질 것이다 우리는이 경우에 원하는, 128 00:06:38,480 --> 00:06:41,960 우리는 동적으로했습니다 때문에 내 차를 할당. 129 00:06:41,960 --> 00:06:43,610 >> 그건 바로,하지만 가지 짜증나? 130 00:06:43,610 --> 00:06:44,818 이제 2 단계의 과정이있다. 131 00:06:44,818 --> 00:06:47,460 이제 우리는 dereference--해야 우리는 스타 연산자를 가지고, 132 00:06:47,460 --> 00:06:48,910 그리고 우리는 도트​​ 연산자가 있습니다. 133 00:06:48,910 --> 00:06:51,660 그리고 예상대로, 때문에 C 프로그래머는 짧은 방법을 사랑 134 00:06:51,660 --> 00:06:53,740 일을하고,이 짧은 방법은이 작업을 수행 할 수 있습니다. 135 00:06:53,740 --> 00:06:57,790 화살표라는 또 다른 운영자가있다, 이는이 과정이 훨씬 쉬워집니다. 136 00:06:57,790 --> 00:07:00,750 화살표가 작동하는 방식입니다 그 첫 번째 역 참조 137 00:07:00,750 --> 00:07:03,560 왼쪽 포인터 운영자의 측면, 138 00:07:03,560 --> 00:07:06,620 다음, 후에는 역 참조하는 데 왼쪽 포인터 139 00:07:06,620 --> 00:07:09,620 그것은 오른쪽에있는 필드에 액세스합니다. 140 00:07:09,620 --> 00:07:14,170 그래서 이전에 우리는 이런 종류가 있었다 내 차,이 모든 물건을 점 스타 141 00:07:14,170 --> 00:07:15,880 같은 거기에가는 많은이 있었다. 142 00:07:15,880 --> 00:07:22,040 그러나 우리가 대신 할 수있는 것은이 항아리입니다 내 차 화살표 년 2011 같습니다. 143 00:07:22,040 --> 00:07:23,580 >> 다시 말하지만, 여기에 무슨 일이야? 144 00:07:23,580 --> 00:07:25,720 첫째, 나는 내 차를 역 참조하고 있습니다. 145 00:07:25,720 --> 00:07:27,810 어느 다시, 여기에 포인터입니다. 146 00:07:27,810 --> 00:07:31,270 다음에, 거친 나는 내 차를 역 참조 147 00:07:31,270 --> 00:07:35,130 다음 필드에 액세스 할 수 있습니다 년, 접시, 및 주행 거리계 148 00:07:35,130 --> 00:07:40,020 단지 내가 할 수있는 등 처음 갖는 이전 내 차를 역 참조 사용하는 스타, 149 00:07:40,020 --> 00:07:42,020 및 필드를 액세스하는 점. 150 00:07:42,020 --> 00:07:45,290 그래서 당신은 당신이 구조를 가질 수있다 구조에 대한 포인터를 가질 수있다, 151 00:07:45,290 --> 00:07:48,360 당신은 액세스 할 수있는 방법이 이러한 구조의 필드, 152 00:07:48,360 --> 00:07:52,600 당신은 포인터에 있는지 여부 그들 또는 변수 자체. 153 00:07:52,600 --> 00:07:57,640 점 또는 화살표에 따라 변수는 방법을 선언했다. 154 00:07:57,640 --> 00:08:00,510 내가 더그 로이드 해요,이 CS50입니다. 155 00:08:00,510 --> 00:08:01,975