1 00:00:00,000 --> 00:00:09,572 2 00:00:09,572 --> 00:00:12,030 ROB 보덴은 : 안녕하세요, 저는, 롭 보우 덴 해요 과의이 quiz0 대해 얘기하자. 3 00:00:12,030 --> 00:00:13,280 4 00:00:13,280 --> 00:00:14,545 >> 그래서 첫 번째 질문. 5 00:00:14,545 --> 00:00:17,750 이는 질문 어디 해당 번호를 코딩하는데 필요한 6 00:00:17,750 --> 00:00:21,270 이진 전구 127. 7 00:00:21,270 --> 00:00:23,550 당신이 원하는 경우에, 당신은 할 수 일반 변환을 수행 8 00:00:23,550 --> 00:00:25,950 소수의 이진, bi-- 또는에서. 9 00:00:25,950 --> 00:00:28,300 그러나 그것은 아마거야 시간이 많이 걸릴 수 있습니다. 10 00:00:28,300 --> 00:00:31,750 난 당신이 알아낼 수있는, 의미, OK, 1, 거기에, 2가에 있습니다 11 00:00:31,750 --> 00:00:33,650 4가에서 8가에 있습니다. 12 00:00:33,650 --> 00:00:39,280 쉬운 방법은, (127)는 128을 뺀 것입니다. 13 00:00:39,280 --> 00:00:42,013 즉, 가장 왼쪽에있는 전구는 128 비트입니다. 14 00:00:42,013 --> 00:00:43,490 15 00:00:43,490 --> 00:00:47,860 그래서 127은 모든 정말 다른 전구, 16 00:00:47,860 --> 00:00:51,420 즉, 왼쪽은 이후 전구 1을 뺀. 17 00:00:51,420 --> 00:00:52,800 즉 그 질문은 여기까지. 18 00:00:52,800 --> 00:00:54,060 >> 질문 하나. 19 00:00:54,060 --> 00:00:56,710 3 비트 그래서 당신은 할 수 있습니다 8 고유 한 값을 나타냅니다. 20 00:00:56,710 --> 00:01:01,000 그렇다면 왜 가장 큰 음이 아닌 7 당신이 나타낼 수있는 소수의 정수? 21 00:01:01,000 --> 00:01:04,050 음, 만약에 우리는 할 수 있습니다 8 고유 한 값을 나타냅니다, 22 00:01:04,050 --> 00:01:07,430 그 다음 우리가 될거야 표현하면 0부터 7까지입니다. 23 00:01:07,430 --> 00:01:08,745 0의 값 중 하나를 차지한다. 24 00:01:08,745 --> 00:01:09,980 25 00:01:09,980 --> 00:01:11,190 >> 질문 두 가지. 26 00:01:11,190 --> 00:01:14,610 n 비트와, 얼마나 많은 별개 값은 대표 할 수 있는가? 27 00:01:14,610 --> 00:01:19,080 따라서, n 비트와 함께, 당신은 2가 각 비트에 사용할 수있는 값. 28 00:01:19,080 --> 00:01:22,300 그래서 우리는이 가능한 값을 첫 번째 비트, 2 사용할 수있는 값 29 00:01:22,300 --> 00:01:24,450 초, 2 세 번째 가능합니다. 30 00:01:24,450 --> 00:01:28,730 그리고 그건 2 회 2 회 2, 결국 답은 N 2이다. 31 00:01:28,730 --> 00:01:30,010 32 00:01:30,010 --> 00:01:31,100 >> 질문 세. 33 00:01:31,100 --> 00:01:33,450 이진 0 × 50은 무엇입니까? 34 00:01:33,450 --> 00:01:39,490 그래서 16 진수 매우있다 기억 이진 간단 변환. 35 00:01:39,490 --> 00:01:43,180 그래서 여기, 우리는 볼 필요가 (5)와 독립적으로 0. 36 00:01:43,180 --> 00:01:45,110 그래서 진 5 무엇인가? 37 00:01:45,110 --> 00:01:48,400 0101, 즉 1 비트와 4 비트입니다. 38 00:01:48,400 --> 00:01:49,900 진 0 무엇입니까? 39 00:01:49,900 --> 00:01:50,520 까다로운 없습니다. 40 00:01:50,520 --> 00:01:52,180 0000. 41 00:01:52,180 --> 00:01:54,970 그러니 그들을 함께 넣어 즉 바이너리의 전체 숫자입니다. 42 00:01:54,970 --> 00:01:57,640 01010000. 43 00:01:57,640 --> 00:02:00,439 당신이 원하는 경우 그리고 당신은 할 수 그 왼쪽에 제로를 벗어. 44 00:02:00,439 --> 00:02:01,105 그것은 무관​​합니다. 45 00:02:01,105 --> 00:02:02,920 46 00:02:02,920 --> 00:02:05,733 >> 그럼 대안 진수의 0 × 50은 무엇입니까? 47 00:02:05,733 --> 00:02:08,649 당신이 원하는 경우라면, 당신은 나랑 ... 이진 더 편안하게, 48 00:02:08,649 --> 00:02:11,340 당신은 바이너리 대답을 취할 수 그리고 소수에 그 변환합니다. 49 00:02:11,340 --> 00:02:13,870 또는 우리는 기억할 수 그 진수. 50 00:02:13,870 --> 00:02:21,140 0 있도록하면 0 번째 위치에 있고 도 5는 제 1 장소 (16)에있다. 51 00:02:21,140 --> 00:02:25,990 그래서 여기, 우리는 5 번 (16)가 먼저, 제로 플러스 0 시간 16 52 00:02:25,990 --> 00:02:27,520 80입니다. 53 00:02:27,520 --> 00:02:29,710 그리고 당신은 보았다 경우 질문에 대한 제목, 54 00:02:29,710 --> 00:02:32,920 그것은 가지였다 CS (80)이었다 이 문제에 대한 답에 힌트. 55 00:02:32,920 --> 00:02:34,460 56 00:02:34,460 --> 00:02:35,420 >> 질문 다섯. 57 00:02:35,420 --> 00:02:40,320 우리는 인이 스크래치 스크립트가 4 회 땅콩 버터 젤리를 반복합니다. 58 00:02:40,320 --> 00:02:42,800 그래서 우리가 어떻게 C 코드 지금 무엇입니까? 59 00:02:42,800 --> 00:02:47,730 음, 우리는 이곳에에게 굵은 글씨 부분이 당신이 구현할 수 있었던 유일한 부분입니다. 60 00:02:47,730 --> 00:02:51,950 그래서 우리는 4 반복있어 4 루프가 배, printf와 보내고 땅콩 버터 젤리, 61 00:02:51,950 --> 00:02:53,910 새로운 라인의 문제는 요청으로. 62 00:02:53,910 --> 00:02:55,250 63 00:02:55,250 --> 00:02:57,490 >> 질문 여섯, 다른 스크래치 문제. 64 00:02:57,490 --> 00:03:00,210 우리는 우리가 영원히 루프에있는 것을 알 수있다. 65 00:03:00,210 --> 00:03:05,000 우리는 변수 내가 말을하는지 다음 1 I를 증가. 66 00:03:05,000 --> 00:03:09,580 이제 우리는 C.에 있다는 것을 수행 할 우리가 이것을 할 수 있었던 여러 가지 방법. 67 00:03:09,580 --> 00:03:12,840 여기에 우리가 코딩하는 일이 동안 (TRUE)로 영원히 루프. 68 00:03:12,840 --> 00:03:16,600 그래서 우리는, 변수를 내가 선언 같은 우리는 스크래치에 변수 나 있었다. 69 00:03:16,600 --> 00:03:21,950 i 변수를 선언하고 영원히 (TRUE) 동안, 우리는 i 변수를 말한다. 70 00:03:21,950 --> 00:03:25,260 printf의 % 전 ... 또는 % d를 사용했습니다 수 있도록. 71 00:03:25,260 --> 00:03:27,985 우리는 그 변수 말을하고, 다음 증가, 내가 ++. 72 00:03:27,985 --> 00:03:29,560 73 00:03:29,560 --> 00:03:30,830 >> 질문 일곱. 74 00:03:30,830 --> 00:03:35,560 이제 우리는 매우 비슷한 작업을 수행 할 마리오 점 C의 문제에서 하나를 설정합니다. 75 00:03:35,560 --> 00:03:39,110 우리는이 해시 태그를 인쇄하려면, 우리는 다섯을 인쇄하려면 76 00:03:39,110 --> 00:03:40,700 이 해시의 세 가지 사각형으로. 77 00:03:40,700 --> 00:03:41,770 78 00:03:41,770 --> 00:03:43,162 그래서 우리는 어떻게 그렇게 할거야? 79 00:03:43,162 --> 00:03:45,370 음, 우리는 당신에게 전체를 제공 코드의 무리, 그리고 단지 80 00:03:45,370 --> 00:03:47,560 인쇄 그리드 기능을 작성해야합니다. 81 00:03:47,560 --> 00:03:49,540 >> 그래서 PrintGrid이 생겼을까? 82 00:03:49,540 --> 00:03:51,480 그럼 당신은 지나서 폭과 높이입니다. 83 00:03:51,480 --> 00:03:53,520 그래서 우리는 외부를 4 루프, 즉 반복이야 84 00:03:53,520 --> 00:03:57,650 이것의 모든 행 이상 우리가 인쇄 할 그리드. 85 00:03:57,650 --> 00:04:01,250 그런 다음 우리는 간 중첩 된 4 루프가 즉, 각각의 컬럼을 통해 인쇄합니다. 86 00:04:01,250 --> 00:04:06,210 그래서 각 행에 대해, 우리의 인쇄 각 열, 하나의 해시. 87 00:04:06,210 --> 00:04:10,045 그 다음 행의 끝에서 우리가 인쇄 하나의 새로운 라인은 다음 행으로 이동합니다. 88 00:04:10,045 --> 00:04:11,420 그리고 전체 그리드를합니다. 89 00:04:11,420 --> 00:04:12,810 90 00:04:12,810 --> 00:04:13,675 >> 질문 여덟. 91 00:04:13,675 --> 00:04:17,170 PrintGrid 같은 기능을 말한다 수익을 부작용이 있지만 92 00:04:17,170 --> 00:04:17,670 값. 93 00:04:17,670 --> 00:04:19,209 차이를 설명한다. 94 00:04:19,209 --> 00:04:23,080 그래서 당신이 기억에 의존 부작용은 무엇. 95 00:04:23,080 --> 00:04:25,180 음, 반환 value-- 우리는 PrintGrid하지 않습니다 알고 96 00:04:25,180 --> 00:04:28,180 이후, 리턴 값을 가지고 바로 여기에이 무효 말한다. 97 00:04:28,180 --> 00:04:31,150 무효 반환 그래서 아무것도 정말 아무것도 반환하지 않습니다. 98 00:04:31,150 --> 00:04:32,200 99 00:04:32,200 --> 00:04:33,620 그래서 부작용은 무엇입니까? 100 00:04:33,620 --> 00:04:36,620 음, 부작용이다 종류의 지속 아무것도 101 00:04:36,620 --> 00:04:39,500 기능이 종료 된 이후에 즉, 단지 반환되지 않았습니다 102 00:04:39,500 --> 00:04:41,340 그리고 그것은 단지 입력에서 아니었다. 103 00:04:41,340 --> 00:04:44,970 >> 따라서, 예를 들어, 우리는 수도 전역 변수를 변경합니다. 104 00:04:44,970 --> 00:04:46,590 이는 부작용이 될 것이다. 105 00:04:46,590 --> 00:04:49,000 특히이 경우에있어서, 매우 중요한 부작용 106 00:04:49,000 --> 00:04:51,070 화면에 인쇄됩니다. 107 00:04:51,070 --> 00:04:53,110 그래서 부작용은 그 PrintGrid가 있습니다. 108 00:04:53,110 --> 00:04:54,980 우리는 화면에이 일을 인쇄 할 수 있습니다. 109 00:04:54,980 --> 00:04:56,370 그리고 당신은 생각할 수 그 부작용으로서, 110 00:04:56,370 --> 00:04:58,690 그 뭔가는 이후 그 이 기능 종료 후 지속. 111 00:04:58,690 --> 00:05:01,481 즉, 범위 이외의 뭔가 이 기능의 궁극적 112 00:05:01,481 --> 00:05:03,380 변경되고, 화면의 내용. 113 00:05:03,380 --> 00:05:05,200 114 00:05:05,200 --> 00:05:05,839 >> 질문 아홉. 115 00:05:05,839 --> 00:05:07,880 아래의 프로그램을 고려 하는 행 번호에 116 00:05:07,880 --> 00:05:09,740 추가되었습니다 토론을 위해. 117 00:05:09,740 --> 00:05:13,480 이 프로그램에 그래서 우리는 단지입니다 이를 저장하여 GetString 호출 118 00:05:13,480 --> 00:05:16,220 이 변수의 한 다음 그 변수의 인쇄. 119 00:05:16,220 --> 00:05:16,720 확인을 클릭합니다. 120 00:05:16,720 --> 00:05:19,090 선 하나가있는 그래서 설명한다. 121 00:05:19,090 --> 00:05:20,920 #INCLUDE CS50 도트 시간. 122 00:05:20,920 --> 00:05:23,820 왜 우리는 CS50 도트 시간을 인클루드해야합니까? 123 00:05:23,820 --> 00:05:26,180 그럼 우리가 전화하는거야 기능을하여 GetString, 124 00:05:26,180 --> 00:05:28,840 및하여 GetString 정의된다 CS50 라이브러리. 125 00:05:28,840 --> 00:05:31,600 우리가 작성하지 않은 경우 #INCLUDE CS50 도트 H, 126 00:05:31,600 --> 00:05:35,760 우리는 암시 적 선언을 얻을 것이다 하여 GetString 기능 오류 127 00:05:35,760 --> 00:05:36,840 컴파일러에서. 128 00:05:36,840 --> 00:05:40,110 그래서 우리는 library--를 포함해야 우리는 헤더 파일을 포함해야합니다, 129 00:05:40,110 --> 00:05:42,870 그렇지 않으면 컴파일러는하지 않습니다 하여 GetString의 존재를 인식하고 있습니다. 130 00:05:42,870 --> 00:05:44,380 131 00:05:44,380 --> 00:05:46,140 >> 라인 두 가지가 존재하는 이유를 설명한다. 132 00:05:46,140 --> 00:05:47,890 그래서 표준 IO 도트 시간. 133 00:05:47,890 --> 00:05:50,430 그것은 정확히 같은 야 이전의 문제로서, 134 00:05:50,430 --> 00:05:53,310 대신 다루는 제외 하여 GetString, 우리는 printf의에 대해 얘기하고. 135 00:05:53,310 --> 00:05:56,654 우리는 우리가해야 할 말을 작성하지 않은 경우 표준 IO 도트 H를 포함하는, 136 00:05:56,654 --> 00:05:58,820 우리는 할 수 없을 것이다 printf 함수를 사용하려면, 137 00:05:58,820 --> 00:06:00,653 컴파일러 때문에 그것에 대해 알고하지 않을 것이다. 138 00:06:00,653 --> 00:06:01,750 139 00:06:01,750 --> 00:06:05,260 >> 하고 똑똑한 중요성은 무엇인가 의 4 번에 무효? 140 00:06:05,260 --> 00:06:08,010 그래서 여기에 우리가 INT 주 (무효)를 가지고있다. 141 00:06:08,010 --> 00:06:10,600 그건 그냥 우리 말 것 명령 줄을받지된다 142 00:06:10,600 --> 00:06:12,280 주요 인수. 143 00:06:12,280 --> 00:06:17,390 우리가 INT 말할 수 있음을 기억하십시오 주요 INT는 argc 문자열 argv와 브래킷. 144 00:06:17,390 --> 00:06:20,400 그래서 여기에 우리는 우리 말을 무효라고 명령 줄 인수를 무시합니다. 145 00:06:20,400 --> 00:06:21,840 146 00:06:21,840 --> 00:06:25,225 >> 정확하게, 메모리에 대하여, 설명한다 라인에서 무엇을하여 GetString 여섯 돌아갑니다. 147 00:06:25,225 --> 00:06:27,040 148 00:06:27,040 --> 00:06:31,640 하여 GetString는 블록을 반환 메모리, 문자의 배열. 149 00:06:31,640 --> 00:06:34,870 정말 반환 것 첫 번째 문자의 포인터. 150 00:06:34,870 --> 00:06:37,170 문자열이 문자 스타임을 기억하십시오. 151 00:06:37,170 --> 00:06:41,360 그래서들 제에 대한 포인터이며 문자는 어떤에서 문자열입니다 152 00:06:41,360 --> 00:06:43,510 사용자가 키보드로 입력하는 것이. 153 00:06:43,510 --> 00:06:47,070 그리고 메모리는 malloc으로 할당 될 일이, 그래서 메모리는 힙에있다. 154 00:06:47,070 --> 00:06:49,080 155 00:06:49,080 --> 00:06:50,450 >> 질문 13. 156 00:06:50,450 --> 00:06:51,960 아래의 프로그램을 고려하십시오. 157 00:06:51,960 --> 00:06:55,579 그래서이 모든 프로그램을하고있다 10로 나눈 1의 printf 보내고있다. 158 00:06:55,579 --> 00:06:57,370 따라서 컴파일 때 실행,이 프로그램 159 00:06:57,370 --> 00:07:01,170 출력 0.0, 비록 10로 나눈 1은 0.1입니다. 160 00:07:01,170 --> 00:07:02,970 그래서 왜 0.0인가? 161 00:07:02,970 --> 00:07:05,510 음,이 때문에입니다 정수 부문. 162 00:07:05,510 --> 00:07:08,580 따라서도 1은 정수 10은 정수이다. 163 00:07:08,580 --> 00:07:11,980 그래서 1 ~ 10, 모든 나눈 정수로 처리됩니다, 164 00:07:11,980 --> 00:07:16,380 및 C에서, 우리는 정수 나눗셈을 수행 할 때, 우리는 어떤 소수점을 절단. 165 00:07:16,380 --> 00:07:19,590 그래서 1 ~ 10입니다 구분 0을 입력 한 다음 우리는 노력하고 166 00:07:19,590 --> 00:07:24,410 그래서, float로서 그를 인쇄 float로서 인쇄 제로는 0.0입니다. 167 00:07:24,410 --> 00:07:27,400 우리는 0.0을받을 이유입니다. 168 00:07:27,400 --> 00:07:28,940 >> 아래의 프로그램을 고려하십시오. 169 00:07:28,940 --> 00:07:31,280 이제 우리는 0.1을 인쇄하고 있습니다. 170 00:07:31,280 --> 00:07:34,280 그래서없는 정수 나누기, 우리는 단지 0.1를 인쇄하는 171 00:07:34,280 --> 00:07:37,100 그러나 우리는 그것을 인쇄하는 28 소수점 자리에. 172 00:07:37,100 --> 00:07:41,810 그리고 우리는이 0.1000, 왕창 얻을 제로의, 5 5 5, 어쩌구 저쩌구. 173 00:07:41,810 --> 00:07:45,495 그것을 않습니다 그래서 여기에 질문입니다 대신 정확히 0.1의 것을 인쇄? 174 00:07:45,495 --> 00:07:46,620 175 00:07:46,620 --> 00:07:49,640 >> 그래서 여기에 그 이유는 지금 포인트 부정확 부동. 176 00:07:49,640 --> 00:07:53,410 플로트는 32 비트 기억하십시오. 177 00:07:53,410 --> 00:07:57,540 그래서 우리는 단지 한정된 수를 나타낼 수 있습니다 들 (32)의 부동 소수점 값 178 00:07:57,540 --> 00:07:58,560 비트. 179 00:07:58,560 --> 00:08:01,760 그럼 궁극적으로 무한히있다 많은 부동 소수점 값, 180 00:08:01,760 --> 00:08:04,940 부동 무한히 많은있다 0과 1 사이의 점수 값, 181 00:08:04,940 --> 00:08:07,860 우리는 분명히 할 수있어 보다 더 많은 값을 나타냅니다. 182 00:08:07,860 --> 00:08:13,230 그래서 우리는에 희생을해야 대부분의 값을 표시 할 수 있습니다. 183 00:08:13,230 --> 00:08:16,960 >> 그래서 0.1과 같은 값, 분명히 우리는 그것을 정확하게 나타낼 수 없습니다. 184 00:08:16,960 --> 00:08:22,500 그래서 그 대신 0.1을 대표하는 우리는 할 가장 좋은 우리는이 0.100000 5 5를 나타낼 수 있습니다 185 00:08:22,500 --> 00:08:23,260 5. 186 00:08:23,260 --> 00:08:26,306 그리고는, 아주 가까이 있지만, 많은 응용 프로그램에 대한 187 00:08:26,306 --> 00:08:28,430 당신에 대해 걱정할 필요가 포인트 부정확 부동 188 00:08:28,430 --> 00:08:30,930 우리가 대표 할 수 없기 때문에 모든 정확히 포인트를 부동. 189 00:08:30,930 --> 00:08:32,500 190 00:08:32,500 --> 00:08:33,380 >> 질문 15. 191 00:08:33,380 --> 00:08:34,679 아래의 코드를 살펴 보자. 192 00:08:34,679 --> 00:08:36,630 우리는 1 플러스 1을 인쇄하고 있습니다. 193 00:08:36,630 --> 00:08:38,289 그래서 여기에 속임수가 없다. 194 00:08:38,289 --> 00:08:41,780 1 더하기 1은 2로 평가하고, 우리는 인쇄하고 있습니다. 195 00:08:41,780 --> 00:08:42,789 이것은 단지 2를 인쇄합니다. 196 00:08:42,789 --> 00:08:43,850 197 00:08:43,850 --> 00:08:44,700 >> 질문 16. 198 00:08:44,700 --> 00:08:49,450 이제 우리는 문자를 인쇄하는 1 더하기 문자 1. 199 00:08:49,450 --> 00:08:52,110 왜이되지 않습니다 같은 일을 인쇄? 200 00:08:52,110 --> 00:08:57,680 그럼 문자 1을 더한 문자 도 1은, 캐릭터 (1)는 ASCII 값 (49)을 갖는다. 201 00:08:57,680 --> 00:09:04,840 그래서 정말 49 말하는 플러스 49, 및 궁극적으로이 98를 인쇄 할 것입니다. 202 00:09:04,840 --> 00:09:06,130 그래서이 둘을 인쇄하지 않습니다. 203 00:09:06,130 --> 00:09:08,070 204 00:09:08,070 --> 00:09:09,271 >> 질문 17. 205 00:09:09,271 --> 00:09:11,520 구현을 완료 같은 방법으로 아래의 홀수 206 00:09:11,520 --> 00:09:14,615 함수는 다음의 경우에 true를 반환 n이 짝수 경우 n은 홀수 및 false입니다. 207 00:09:14,615 --> 00:09:16,710 208 00:09:16,710 --> 00:09:19,330 이것은 좋은 목적 모드 연산자. 209 00:09:19,330 --> 00:09:24,530 그래서 우리는 우리의 인수 N을, n 개의 모드 2가 아니라 1에 해당하는 경우 210 00:09:24,530 --> 00:09:28,030 즉 N 나눈 것을 의미한다 2 나머지를했다. 211 00:09:28,030 --> 00:09:33,270 n은 2로 나눈 경우, 나머지를했다 그 n은 홀수, 그래서 우리는 true를 돌려 것을 의미한다. 212 00:09:33,270 --> 00:09:34,910 그렇지 우리는 false를 반환. 213 00:09:34,910 --> 00:09:39,070 또한이 같음을 모드 N 할 수 있었다 제로는, 다른, false를 돌려 true를 반환. 214 00:09:39,070 --> 00:09:41,600 215 00:09:41,600 --> 00:09:43,640 >> 아래의 재귀 함수를 생각해 보자. 216 00:09:43,640 --> 00:09:46,920 n은 그래서 만약보다 작거나 1 반환, 1 인, 217 00:09:46,920 --> 00:09:50,430 N 마이너스 1의 F 그렇지 않은 경우 n 번. 218 00:09:50,430 --> 00:09:52,556 이 함수는 무엇인가? 219 00:09:52,556 --> 00:09:54,305 음,이 단지이다 계승 기능. 220 00:09:54,305 --> 00:09:55,410 221 00:09:55,410 --> 00:09:57,405 이 멋지게 표현된다 n 개의 요인으로. 222 00:09:57,405 --> 00:09:58,720 223 00:09:58,720 --> 00:10:02,310 >> 그래서 지금 19 질문, 우리는 원하는 이 재귀 함수를 취할. 224 00:10:02,310 --> 00:10:04,530 우리는 반복하고 싶다. 225 00:10:04,530 --> 00:10:05,874 그렇다면 우리가해야합니까? 226 00:10:05,874 --> 00:10:07,790 그럼 직원 이 솔루션은 다시 거기 227 00:10:07,790 --> 00:10:11,090 당신이 할 수 있었던 여러 가지 방법 우리는이 INT 제품과 함께 시작하는 것이 228 00:10:11,090 --> 00:10:11,812 1과 같다. 229 00:10:11,812 --> 00:10:13,520 그리고이 전역 루프, 우리는거야 230 00:10:13,520 --> 00:10:17,590 궁극적으로에 제품을 곱합니다 완전 요인으로 끝날. 231 00:10:17,590 --> 00:10:21,870 인터넷 용 내가 2 동일 그래서입니다 보다 작거나 N과 동일, 내가 ++. 232 00:10:21,870 --> 00:10:24,130 >> 내가 2에 해당하는 이유를 궁금해 할 수 있습니다. 233 00:10:24,130 --> 00:10:28,380 음, 우리가 가지고 여기에 기억 우리의 기본 케이스가 정확한지 확인하십시오. 234 00:10:28,380 --> 00:10:32,180 n이보다 작거나 같으면 그래서 1, 우리는 1을 반환하고 있습니다. 235 00:10:32,180 --> 00:10:34,830 내가 2와 동일한에서 여기 그래서, 우리는 시작합니다. 236 00:10:34,830 --> 00:10:39,090 그럼 난 1 인 경우 다음 엥 또는 n은 루프 후 1 인 경우 237 00:10:39,090 --> 00:10:40,600 전혀 실행되지 않을 것입니다. 238 00:10:40,600 --> 00:10:43,190 그래서 우리는 단지 것 1 반환 제품. 239 00:10:43,190 --> 00:10:45,920 마찬가지로, 만약 n은 있었다 보다 아무것도 더 적은 1-- 240 00:10:45,920 --> 00:10:49,290 이 0이었다 음수 1, whatever-- 우리는 여전히 1을 반환 할 것 241 00:10:49,290 --> 00:10:52,260 이는 정확히 무엇이다 재귀 버전은하고있다. 242 00:10:52,260 --> 00:10:54,660 >> 이제, n은 크면 1보다, 우리는거야 243 00:10:54,660 --> 00:10:56,550 적어도 하나를 수행합니다 이 루프의 반복. 244 00:10:56,550 --> 00:11:00,630 그럼 우리는 거니까, n은 5 가정 해 봅시다 제품 시간을 할 예정은 2와 같습니다. 245 00:11:00,630 --> 00:11:02,165 그래서 지금 제품은 2입니다. 246 00:11:02,165 --> 00:11:04,040 이제 우리가 할거야 제품 시간은 3과 같다. 247 00:11:04,040 --> 00:11:04,690 지금은 6입니다. 248 00:11:04,690 --> 00:11:07,500 제품 시간은 지금 24의 4와 동일합니다. 249 00:11:07,500 --> 00:11:10,420 제품 시간이 지금은 120의 5에 해당. 250 00:11:10,420 --> 00:11:16,730 그럼 궁극적으로, 우리는 반환하고 정확하게 5 요인이다 (120). 251 00:11:16,730 --> 00:11:17,510 >> 질문 20. 252 00:11:17,510 --> 00:11:22,480 이것은 당신이 작성해야 하나 지정된 알고리즘이 표에서 253 00:11:22,480 --> 00:11:25,735 우리가 본 적이 아무것도, 그 이러한 알고리즘 실행에 맞는 254 00:11:25,735 --> 00:11:28,060 시간이 점근 실행 시간. 255 00:11:28,060 --> 00:11:33,270 그래서 알고리즘은 무엇입니다 1 오메가,하지만 N의 큰 O입니다? 256 00:11:33,270 --> 00:11:35,970 무한히있을 수 여기에 많은 답변. 257 00:11:35,970 --> 00:11:39,790 우리는 아마 가장 본 적이 한 자주 단지 선형 검색입니다. 258 00:11:39,790 --> 00:11:42,050 >> 최상의 경우에 따라서 시나리오, 우리가하고있는 항목 259 00:11:42,050 --> 00:11:44,050 찾는 것은에있다 목록의 시작 260 00:11:44,050 --> 00:11:47,400 그래서 1 단계 오메가, 우리가 확인 먼저, 261 00:11:47,400 --> 00:11:49,740 우리는 즉시 반환 것을 우리는 항목을 발견했다. 262 00:11:49,740 --> 00:11:52,189 최악의 시나리오에서, 항목은 끝에 263 00:11:52,189 --> 00:11:53,730 또는 항목 전혀 목록이 아니다. 264 00:11:53,730 --> 00:11:56,700 그래서 우리는 검색해야 전체 목록, 모든 N 265 00:11:56,700 --> 00:11:58,480 요소, 그것은 N의 O를 이유입니다. 266 00:11:58,480 --> 00:11:59,670 267 00:11:59,670 --> 00:12:04,880 >> 그래서 지금은 모두 무언가이다 N 로그 n의 오메가, 및 N 로그 n의 큰 O. 268 00:12:04,880 --> 00:12:08,650 그럼 가장 관련 일 우리는 여기에서 보이는 종류로 병합했습니다. 269 00:12:08,650 --> 00:12:12,950 그래서 일종의 기억 병합, 궁극적으로 THETA입니다 270 00:12:12,950 --> 00:12:16,920 세타가 정의 된 n 개의 로그 n 인 오메가 큰 O는 모두 동일합니다. 271 00:12:16,920 --> 00:12:17,580 두 N 로그 n. 272 00:12:17,580 --> 00:12:18,690 273 00:12:18,690 --> 00:12:21,970 >> 오메가는 뭔가는 무엇인가 N, 그리고 N의 O 제곱? 274 00:12:21,970 --> 00:12:23,990 음, 다시 거기 여러 가능한 답변. 275 00:12:23,990 --> 00:12:26,440 여기에서 우리는 거품 정렬 말을하는 일. 276 00:12:26,440 --> 00:12:28,840 삽입 정렬은 여기에 작동합니다. 277 00:12:28,840 --> 00:12:31,400 그 거품 정렬을 기억 그 최적화 곳이 있습니다, 278 00:12:31,400 --> 00:12:34,630 당신이 얻을 수있는 경우 전체 목록을 279 00:12:34,630 --> 00:12:37,402 할 필요없이 어떤 스왑, 다음, 잘, 280 00:12:37,402 --> 00:12:40,110 우리는 즉시 그것을 반환 할 수 있습니다 이 목록은 우선 분류되었다. 281 00:12:40,110 --> 00:12:43,185 , 최상의 시나리오에 따라서 그것은 N의 단지 오메가입니다. 282 00:12:43,185 --> 00:12:45,960 그냥 멋지게 아니라면 로 시작하는 목록을 분류 283 00:12:45,960 --> 00:12:48,270 우리는 N의 O는 스왑 제곱 있습니다. 284 00:12:48,270 --> 00:12:49,330 285 00:12:49,330 --> 00:12:55,610 그리고 마지막으로, 우리는 선택의 종류가 n은 제곱을 위해, 오메가 큰 O. 모두 286 00:12:55,610 --> 00:12:56,850 >> 질문 21. 287 00:12:56,850 --> 00:12:58,870 정수 오버 플로우는 무엇입니까? 288 00:12:58,870 --> 00:13:02,160 음 다시 앞서와 마찬가지로, 우리는 유한 한 많은 비트가 289 00:13:02,160 --> 00:13:04,255 정수를 나타내는, 그래서 아마 32 비트. 290 00:13:04,255 --> 00:13:06,300 291 00:13:06,300 --> 00:13:09,180 의 우리가 부호있는 정수 있다고 가정 해 봅시다. 292 00:13:09,180 --> 00:13:12,800 그리고 궁극적으로 가장 높은 양수 우리는 나타낼 수 293 00:13:12,800 --> 00:13:15,910 2에 31에서 1을 뺀. 294 00:13:15,910 --> 00:13:19,370 우리가하려고하면 어떤 일이 발생 그 정수를 증가? 295 00:13:19,370 --> 00:13:25,320 음, 우리는 31에 2에서 갈거야 마이너스 1, 아래 음이 모든 방법 296 00:13:25,320 --> 00:13:26,490 31. 297 00:13:26,490 --> 00:13:29,470 그래서이 정수 오버 플로우입니다 당신이 증가 지킬 때, 298 00:13:29,470 --> 00:13:32,330 궁극적으로 당신은 할 수 없습니다 더 높은하고 그냥 가져 299 00:13:32,330 --> 00:13:34,520 다시 모든 방법을 래핑 음의 값에 약. 300 00:13:34,520 --> 00:13:35,850 301 00:13:35,850 --> 00:13:37,779 >> 버퍼 오버 플로우는? 302 00:13:37,779 --> 00:13:39,820 그래서 버퍼 overflow-- 버퍼가 무엇인지 기억. 303 00:13:39,820 --> 00:13:41,000 그것은 메모리의 단지 덩어리입니다. 304 00:13:41,000 --> 00:13:43,350 배열과 같은 버퍼입니다. 305 00:13:43,350 --> 00:13:46,120 그래서 버퍼 오버 플로우 할 때입니다 당신은 메모리에 액세스하려고 306 00:13:46,120 --> 00:13:47,880 그 배열의 끝을 넘어. 307 00:13:47,880 --> 00:13:50,410 당신이이 경우에 따라서 크기 5, 당신의 배열 308 00:13:50,410 --> 00:13:53,700 배열 브래킷에 액세스하려고 5 브래킷 6 브래킷 (7), 309 00:13:53,700 --> 00:13:56,610 이상 또는 아무것도 단부, 또는 아무것도 310 00:13:56,610 --> 00:14:00,790 below-- 배열 브래킷 부정적인 1-- 이들 모두는 버퍼 오버 플로우이다. 311 00:14:00,790 --> 00:14:02,810 당신은 나쁜 방법으로 메모리를 터치하고 있습니다. 312 00:14:02,810 --> 00:14:04,090 313 00:14:04,090 --> 00:14:04,730 >> 질문 23. 314 00:14:04,730 --> 00:14:05,760 315 00:14:05,760 --> 00:14:09,100 당신이 필요로하는이 하나 그래서 strlen 함수를 구현합니다. 316 00:14:09,100 --> 00:14:11,630 그리고 우리는 당신이 할 수 있음을 알 S가 null되지 않습니다 가정, 317 00:14:11,630 --> 00:14:13,790 그래서 당신은 필요 없어 널 (null)에 대한 검사를 수행. 318 00:14:13,790 --> 00:14:16,190 그리고 여러 가지 방법이 있습니다 당신이 이것을 할 수 있었다. 319 00:14:16,190 --> 00:14:18,440 여기에서 우리는 그냥 간단을. 320 00:14:18,440 --> 00:14:21,780 우리는 N, 카운터로 시작합니다. n은 얼마나 많은 문자 카운트. 321 00:14:21,780 --> 00:14:25,560 그래서 우리는 0에서 시작하고, 전체 목록을 반복. 322 00:14:25,560 --> 00:14:29,092 >> 동일의 브래킷 0 널 (NULL) 종료 문자? 323 00:14:29,092 --> 00:14:31,425 우리가 찾고 기억 널 (NULL) 종료 문자 324 00:14:31,425 --> 00:14:33,360 우리의 문자열 시간을 결정합니다. 325 00:14:33,360 --> 00:14:35,890 즉 종료 할 것입니다 모든 관련 문자열입니다. 326 00:14:35,890 --> 00:14:39,400 그래서의 브래킷과 동일 0 널 (NULL) 종료에? 327 00:14:39,400 --> 00:14:42,850 그렇지 않을 경우, 우리는에 갈거야 S 브래킷 1, S 브라켓 2 봐. 328 00:14:42,850 --> 00:14:45,050 우리는 우리까지가는 ​​계속 널 (NULL) 종료를 찾을 수 있습니다. 329 00:14:45,050 --> 00:14:48,580 우리가 그것을 발견했다면, 다음 n은 포함 문자열의 총 길이, 330 00:14:48,580 --> 00:14:49,942 우리는 단지 그것을 반환 할 수 있습니다. 331 00:14:49,942 --> 00:14:51,180 332 00:14:51,180 --> 00:14:51,865 >> 질문 24. 333 00:14:51,865 --> 00:14:53,010 334 00:14:53,010 --> 00:14:56,050 그래서 이것은 하나입니다 당신 무역을 확인해야합니다. 335 00:14:56,050 --> 00:14:59,810 그래서 한 것은 하나의 좋은 하지만 어떤 방법으로 방법은 나쁘다? 336 00:14:59,810 --> 00:15:02,980 그래서 여기, 병합 정렬 경향 거품 정렬보다 더 빠르게합니다. 337 00:15:02,980 --> 00:15:06,530 거기에 잘 거저 가졌 복수 응답이 여기에 있습니다. 338 00:15:06,530 --> 00:15:12,930 그러나 주 하나는 거품 일종이다 정렬 된 목록에 대한 N의 오메가입니다. 339 00:15:12,930 --> 00:15:14,950 >> 우리가 이전에 보았던 그 테이블을 기억하십시오. 340 00:15:14,950 --> 00:15:17,600 그래서 거품의 오메가 정렬 n은 최상의 시나리오 341 00:15:17,600 --> 00:15:20,010 그냥 가서 할 수있어입니다 목록은 한 번 결정 342 00:15:20,010 --> 00:15:22,270 이봐,이 점은 이미 정렬 및 반환. 343 00:15:22,270 --> 00:15:25,960 상관없이, 일종의 병합하지 무슨 당신이 할, N 로그 n의 오메가입니다. 344 00:15:25,960 --> 00:15:29,200 정렬 된 목록, 거품 그래서 종류 빠를거야. 345 00:15:29,200 --> 00:15:30,870 346 00:15:30,870 --> 00:15:32,430 >> 이제 목록을 무엇에 대한 연결된? 347 00:15:32,430 --> 00:15:36,070 그래서 연결리스트는 성장하고 축소 할 수 있습니다 필요한만큼의 요소에 맞게. 348 00:15:36,070 --> 00:15:38,489 그래서 ... 그 얘기도 가졌 보통 직접 비교 349 00:15:38,489 --> 00:15:40,280 링크 될 것입니다 배열을 나열합니다. 350 00:15:40,280 --> 00:15:41,600 351 00:15:41,600 --> 00:15:44,050 그래서 심지어 배열 할 수 있지만 쉽게 성장하고 축소 352 00:15:44,050 --> 00:15:47,130 많은 요소에 맞게 필요에 따라리스트를 링크 353 00:15:47,130 --> 00:15:49,600 array--의 비교 배열은 랜덤 액세스 할 수 있습니다. 354 00:15:49,600 --> 00:15:52,960 우리는 어떤으로 인덱스를 수 배열의 특정 요소입니다. 355 00:15:52,960 --> 00:15:56,430 >> 그래서 링크 된 목록, 우리는 할 수 없습니다 단지 다섯 번째 요소로 이동 356 00:15:56,430 --> 00:16:00,260 우리는 처음부터 통과 할 우리는 다섯 번째 요소에 도달 할 때까지. 357 00:16:00,260 --> 00:16:03,990 그리고 그 걸 막을 수 있을까요 이진 검색과 같은 일을하고. 358 00:16:03,990 --> 00:16:08,150 이진 검색의 말하기, 이진 검색 선형 탐색보다 빠르게되는 경향이있다. 359 00:16:08,150 --> 00:16:11,120 거저 가졌 그래서, 하나의 가능한 것 360 00:16:11,120 --> 00:16:13,380 바이너리 할 수​​ 없다는 것입니다 연결리스트를 검색, 361 00:16:13,380 --> 00:16:14,730 당신은 단지 배열에 그것을 할 수 있습니다. 362 00:16:14,730 --> 00:16:18,030 그러나 아마도 더 중요한 것은, 당신은 이진 검색을 수행 할 수 없습니다 363 00:16:18,030 --> 00:16:20,690 정렬되지 않은 배열. 364 00:16:20,690 --> 00:16:23,990 선행을 정렬해야 할 수도 있습니다 배열, 오직 다음 수 365 00:16:23,990 --> 00:16:25,370 당신은 이진 검색을 수행. 366 00:16:25,370 --> 00:16:27,660 당신의 일이 아닌 경우 그래서 처음부터 정렬, 367 00:16:27,660 --> 00:16:29,250 다음 선형 검색이 더 빠를 수 있습니다. 368 00:16:29,250 --> 00:16:30,620 369 00:16:30,620 --> 00:16:31,740 >> 질문 27. 370 00:16:31,740 --> 00:16:34,770 그래서 아래의 프로그램을 고려, 이는 다음 슬라이드에있을 것입니다. 371 00:16:34,770 --> 00:16:37,790 그리고 이것은 우리가하고있는 일입니다 명시 적으로 언급 할 것 372 00:16:37,790 --> 00:16:39,980 다양한 변수에 대한 값. 373 00:16:39,980 --> 00:16:41,990 그럼 그 살펴 보자. 374 00:16:41,990 --> 00:16:43,160 >> 그래서 하나의 라인. 375 00:16:43,160 --> 00:16:45,457 우리는 INT의 x는 1과 동일합니다. 376 00:16:45,457 --> 00:16:47,040 즉 일어난 유일한 것이다. 377 00:16:47,040 --> 00:16:50,440 그래서 라인 하나에, 우리는에서 볼 우리의 테이블, 즉 Y, a, b 및 TMP는 모두 378 00:16:50,440 --> 00:16:51,540 기절. 379 00:16:51,540 --> 00:16:52,280 그래서 X는 무엇인가? 380 00:16:52,280 --> 00:16:53,860 그런데 우리는 그냥 1과 동일하게 설정. 381 00:16:53,860 --> 00:16:55,020 382 00:16:55,020 --> 00:16:58,770 그리고, 물론, 두 라인 우리는, y를 2로 설정된 것을 알 383 00:16:58,770 --> 00:17:00,550 테이블은 이미 우리를 위해 채워. 384 00:17:00,550 --> 00:17:03,040 그래서 x는 1이고 y는 2입니다. 385 00:17:03,040 --> 00:17:05,890 >> 이제, 라인 세, 우리는 지금이야 스왑 기능 내부. 386 00:17:05,890 --> 00:17:07,560 우리는 스왑 통과 했습니까? 387 00:17:07,560 --> 00:17:11,609 우리는 앰퍼샌드의 X를 통과 B에 대한, 그리고 앰퍼샌드 Y. 388 00:17:11,609 --> 00:17:15,160 어디에 문제 이전 언급 된 그 x의 주소 389 00:17:15,160 --> 00:17:17,520 은 0x10이며, Y의 주소 0x14로이다. 390 00:17:17,520 --> 00:17:18,970 391 00:17:18,970 --> 00:17:21,909 따라서 A와 B는 동일하고 각각을 0x10과 0x14에. 392 00:17:21,909 --> 00:17:23,670 393 00:17:23,670 --> 00:17:26,250 >> 이제 세 번째 줄에서 x와 y는 무엇인가? 394 00:17:26,250 --> 00:17:28,554 음, 아무것도 변경되었습니다 이 시점에서 x와 y에 대해. 395 00:17:28,554 --> 00:17:30,470 심지어 그들이있어하지만 주요 스택 프레임 내부, 396 00:17:30,470 --> 00:17:32,469 그들은 여전히​​ 동일한 가질 값은 이전했다. 397 00:17:32,469 --> 00:17:34,030 우리는 어떤 메모리를 수정하지 않았습니다. 398 00:17:34,030 --> 00:17:35,710 그래서 x는 1이고, Y는 2입니다. 399 00:17:35,710 --> 00:17:36,550 400 00:17:36,550 --> 00:17:37,050 좋아. 401 00:17:37,050 --> 00:17:40,300 그래서 지금 우리는 별표와 같다 INT의 tmp 말했다. 402 00:17:40,300 --> 00:17:44,410 그래서 4 번, 모두에서 tmp를 제외하고 동일하다. 403 00:17:44,410 --> 00:17:47,130 우리는 어떤 값을 변경하지 않은 TMP를 제외하고 아무것도. 404 00:17:47,130 --> 00:17:49,230 우리는 별표와 같다 TMP를 설정한다. 405 00:17:49,230 --> 00:17:50,620 스타는 무엇입니까? 406 00:17:50,620 --> 00:17:56,240 음, 포인트는 X에, 그래서 스타 1과 동일한 X,에 것입니다. 407 00:17:56,240 --> 00:18:00,080 그래서 모든 복사 아래로, 및 TMP는 1로 설정됩니다. 408 00:18:00,080 --> 00:18:01,110 >> 이제 다음의 행. 409 00:18:01,110 --> 00:18:03,380 스타는 스타 B와 동일합니다. 410 00:18:03,380 --> 00:18:10,000 그래서 라인으로 five-- 아니라 다시, 모든 스타 뭐든 제외한 동일하다. 411 00:18:10,000 --> 00:18:10,830 스타는 무엇입니까? 412 00:18:10,830 --> 00:18:13,720 음, 우리는 스타가 X 말했다. 413 00:18:13,720 --> 00:18:16,400 그래서 우리는 동일한 스타 B X를 변경하고 있습니다. 414 00:18:16,400 --> 00:18:18,960 스타 B는 무엇입니까? Y. Y에 B 지점. 415 00:18:18,960 --> 00:18:21,030 그래서 스타 B는 Y입니다. 416 00:18:21,030 --> 00:18:25,140 그래서 우리는 X와 Y 동일하게 설정하고 그리고 나머지는 동일합니다. 417 00:18:25,140 --> 00:18:29,130 x는 지금이다 그래서 우리는 다음 행에 표시 2, 나머지는 아래로 복사됩니다. 418 00:18:29,130 --> 00:18:31,120 >> 이제 다음 줄에, 스타 B는 TMP 같습니다. 419 00:18:31,120 --> 00:18:34,740 음, 우리는 스타 B가 Y 말했다, 그래서 우리는 TMP에 y를 동일하게 설정하고 있습니다. 420 00:18:34,740 --> 00:18:37,450 다른 모든 사항은 동일 그래서 모든 것이 아래로 복사됩니다. 421 00:18:37,450 --> 00:18:42,050 우리는 인, tmp를 위해 동일한 Y를 설정하고 다른 하나, 모든 것이 동일합니다. 422 00:18:42,050 --> 00:18:43,210 >> 이제 마지막으로, 라인 일곱. 423 00:18:43,210 --> 00:18:44,700 우리는 다시 주요 기능에있어. 424 00:18:44,700 --> 00:18:46,350 스왑이 완료된 후 우린. 425 00:18:46,350 --> 00:18:48,972 우리는 A, B를 잃었으며,이 TMP하지만 궁극적으로 426 00:18:48,972 --> 00:18:51,180 어떤 값을 변경하지 않는 이 시점에서 아무것도, 427 00:18:51,180 --> 00:18:52,800 우리는 x와 y의 아래로 복사합니다. 428 00:18:52,800 --> 00:18:56,490 그리고 우리는 x와 y가 있음을 알 지금 2과 1 대신 1, 2. 429 00:18:56,490 --> 00:18:58,160 스왑이 성공적으로 실행하고있다. 430 00:18:58,160 --> 00:18:59,500 431 00:18:59,500 --> 00:19:00,105 >> 질문 28. 432 00:19:00,105 --> 00:19:01,226 433 00:19:01,226 --> 00:19:03,100 당신이 발생한다고 가정 오류 메시지 434 00:19:03,100 --> 00:19:06,790 근무 시간 이하 CA 또는 TF 내년. 435 00:19:06,790 --> 00:19:08,930 이들 각 오류를 해결하는 방법을 조언한다. 436 00:19:08,930 --> 00:19:11,160 하여 GetString에 따라서 정의되지 않은 참조. 437 00:19:11,160 --> 00:19:12,540 왜이 표시 될 수 있습니다? 438 00:19:12,540 --> 00:19:15,380 음, 학생이 사용하는 경우 자신의 코드에있는 getString, 439 00:19:15,380 --> 00:19:20,310 그들은 제대로 CS50을 포함 해시 한 도트 H는 CS50 라이브러리를 포함합니다. 440 00:19:20,310 --> 00:19:22,380 >> 글쎄, 그들은 무엇을 할 이 오류를 수정해야합니까? 441 00:19:22,380 --> 00:19:26,810 그들은에서 대시 lcs50을 할 필요가 그들은 컴파일하고 명령 행. 442 00:19:26,810 --> 00:19:29,501 그들이 통과하지 못한 경우에 따라서 그 소리 대시 lcs50, 그들이있어 443 00:19:29,501 --> 00:19:32,000 실제를하지 않을 하여 GetString을 구현하는 코드입니다. 444 00:19:32,000 --> 00:19:33,190 445 00:19:33,190 --> 00:19:34,170 >> 질문 29. 446 00:19:34,170 --> 00:19:36,190 암시 적으로 선언 라이브러리 기능으로 strlen. 447 00:19:36,190 --> 00:19:37,550 448 00:19:37,550 --> 00:19:40,360 그럼이 지금, 그들은하지 않은 적절한 해시 일을 포함한다. 449 00:19:40,360 --> 00:19:41,440 450 00:19:41,440 --> 00:19:45,410 특히이 경우에는, 헤더 파일 그들은, 캐릭터 도트 시간입니다 포함해야 451 00:19:45,410 --> 00:19:48,710 이제 문자열 도트 시간 포함 지금 student-- 컴파일러 452 00:19:48,710 --> 00:19:51,750 에 액세스 할 수 있습니다 strlen 함수의 선언, 453 00:19:51,750 --> 00:19:54,120 그것은 알고 코드 그 제대로 strlen을 사용하고 있습니다. 454 00:19:54,120 --> 00:19:55,380 455 00:19:55,380 --> 00:19:56,580 >> 질문 30. 456 00:19:56,580 --> 00:20:00,240 더 %의 변환 데이터 인수보다. 457 00:20:00,240 --> 00:20:01,540 그래서이 무엇입니까? 458 00:20:01,540 --> 00:20:06,470 그럼 이러한 %가 기억 그들이는 printf 관련성 방법 signs--. 459 00:20:06,470 --> 00:20:08,890 그래서 printf의에 우리는 percent-- 수 우리는 뭔가를 인쇄 할 수 있습니다 460 00:20:08,890 --> 00:20:11,380 퍼센트가 나는 N 백 슬래시. 461 00:20:11,380 --> 00:20:15,310 아니면, 퍼센트 나처럼 인쇄 될 수 있습니다 공간 %의 I, 공간, 퍼센트 나. 462 00:20:15,310 --> 00:20:18,950 그 각각에 대해 이렇게 퍼센트 기호, 우리는 필요 463 00:20:18,950 --> 00:20:21,560 printf의 말에 변수를 전달합니다. 464 00:20:21,560 --> 00:20:26,980 >> 그래서 우리가 말할 경우의 printf 괄호 퍼센트 나는, N 가까운 괄호를 백 슬래시 465 00:20:26,980 --> 00:20:30,270 물론, 우리는 우리가 걸 말 정수를 인쇄하는 것, 466 00:20:30,270 --> 00:20:33,970 그러나 우리는 printf의 통과하지 정수는 실제로 인쇄합니다. 467 00:20:33,970 --> 00:20:37,182 그래서 여기 % 더 데이터 인수보다 변환? 468 00:20:37,182 --> 00:20:39,390 즉 우리가 말하는 것 퍼센트의 전체 무리, 469 00:20:39,390 --> 00:20:42,445 우리는 충분히 변수가없는 실제로 그 퍼센트를 입력합니다. 470 00:20:42,445 --> 00:20:44,850 471 00:20:44,850 --> 00:20:50,010 >> 그리고 확실히, 질문 31, 확실히 하나의 블록에 40 바이트를 잃었다. 472 00:20:50,010 --> 00:20:52,350 그래서이 Valgrind의 오류입니다. 473 00:20:52,350 --> 00:20:54,720 이 것을 말하고있다 어딘가에 코드에서, 474 00:20:54,720 --> 00:20:59,010 당신은 40 할당을 바이트 큰 그래서 당신은, 40 바이트를 malloc으로 할당 475 00:20:59,010 --> 00:21:00,515 그리고 당신은 그것을 해제하지 마십시오. 476 00:21:00,515 --> 00:21:02,480 477 00:21:02,480 --> 00:21:05,140 당신이해야 할 가장 가능성 일부 메모리 누출을 발견하기 위해, 478 00:21:05,140 --> 00:21:07,650 당신이 필요로하는 곳에 찾아 이 메모리 블록을 확보. 479 00:21:07,650 --> 00:21:08,780 480 00:21:08,780 --> 00:21:11,910 >> 그리고, 32 질문 크기 4의 잘못된 쓰기. 481 00:21:11,910 --> 00:21:13,250 다시는 Valgrind의 오류입니다. 482 00:21:13,250 --> 00:21:15,440 이것은 할 필요가 없습니다 지금 메모리 누수. 483 00:21:15,440 --> 00:21:20,750 이 말은 설득력 대부분은, 그건,이다 잘못된 메모리 권리의 일종. 484 00:21:20,750 --> 00:21:23,270 그리고 가장 가능성이 일부 버퍼 오버 플로우의 일종. 485 00:21:23,270 --> 00:21:26,560 어디 당신은 아마, 배열을 정수 배열과의하자 486 00:21:26,560 --> 00:21:30,115 이 크기 5의 말할하고 배열 브래킷 (5) 손을 대지. 487 00:21:30,115 --> 00:21:34,150 당신이 쓰기를 시도한다면 값, 즉 메모리는 아니 488 00:21:34,150 --> 00:21:37,440 실제로 액세스를 가지고, 그 그래서 당신은이 오류를받을거야, 489 00:21:37,440 --> 00:21:39,272 크기 4의 잘못된 쓰기를 말하는. 490 00:21:39,272 --> 00:21:42,480 Valgrind의 당신이있어 인식하는 것입니다 부적절하게 메모리를 터치 시도. 491 00:21:42,480 --> 00:21:43,980 >> 그리고 그 quiz0은 여기까지. 492 00:21:43,980 --> 00:21:47,065 나는 롭 보덴 해요, 이것은 CS50입니다. 493 00:21:47,065 --> 00:21:51,104