1 00:00:00,000 --> 00:00:05,300 2 00:00:05,300 --> 00:00:07,300 DOUG 로이드 : 시작으로 기능 작동, 3 00:00:07,300 --> 00:00:09,966 다른 일이 될 것입니다 이해하기 정말 중요합니다, 4 00:00:09,966 --> 00:00:12,380 어떤 변수 범위의 개념이다. 5 00:00:12,380 --> 00:00:14,490 그래서 범위는 변수의 특성 6 00:00:14,490 --> 00:00:18,860 그 어떤 함수에서 정의 그 변수에 액세스 할 수 있습니다. 7 00:00:18,860 --> 00:00:24,595 >> C에서 두 가지 기본 범위가 있습니다, 지역 변수와 전역 변수. 8 00:00:24,595 --> 00:00:27,830 지금, 지역 변수가 할 수있는 유일한 함수 내에서 액세스 할 수 9 00:00:27,830 --> 00:00:29,045 하는 그들이 만든 것입니다. 10 00:00:29,045 --> 00:00:32,170 그들은 다른 모든 액세스 할 수 없습니다 프로그램에 존재하는 기능, 11 00:00:32,170 --> 00:00:34,184 만 기능 어떤이 작성되었다. 12 00:00:34,184 --> 00:00:36,350 에 전역 변수, 반면, 액세스 할 수 있습니다 13 00:00:36,350 --> 00:00:37,719 프로그램의 모든 기능에 의해. 14 00:00:37,719 --> 00:00:40,260 그 이유는 그들은 내부에 만들어지지하고 있기 때문에 15 00:00:40,260 --> 00:00:41,441 특정 기능. 16 00:00:41,441 --> 00:00:43,690 우리는 밖에서 그들을 선언 기능의 모두 17 00:00:43,690 --> 00:00:48,940 모든 기능은 위치를 알고 있다는 것을 의미 그것은 액세스하고이를 조작 할 수있다. 18 00:00:48,940 --> 00:00:52,010 >> 지금까지 과정에서 당신은 꽤했습니다 많은 독점적으로 일하고 19 00:00:52,010 --> 00:00:54,280 지역 변수와. 20 00:00:54,280 --> 00:00:58,320 여기의 예는 매우있어 간단한 기본 기능과 매우 간단한 21 00:00:58,320 --> 00:01:00,680 우리가 작성한 부가 기능. 22 00:01:00,680 --> 00:01:03,180 이 경우에는, X 어느 난 그냥 녹색으로 한 23 00:01:03,180 --> 00:01:07,400 지역을 선택하거나 해당 변수의 범위, 24 00:01:07,400 --> 00:01:09,240 트리플 함수에 지역이다. 25 00:01:09,240 --> 00:01:12,300 주 모두에서 X를 참조 할 수 없습니다. 26 00:01:12,300 --> 00:01:14,259 그것은 그것이 무엇인지 알 수 없습니다. 27 00:01:14,259 --> 00:01:17,050 없음 기능, 사실, 우리의 경우 여기에 추가 기능을 가지고 28 00:01:17,050 --> 00:01:19,360 X를 참조 할 수있다. 29 00:01:19,360 --> 00:01:23,520 >> 마찬가지로, 나는했습니다하는 결과 파란색으로 만 주에 지역이다. 30 00:01:23,520 --> 00:01:26,980 만 주요 무엇을 알고 변수 결과이다. 31 00:01:26,980 --> 00:01:30,010 트리플은 사용할 수 없습니다. 32 00:01:30,010 --> 00:01:32,580 >> 지금은 언급 한 바와 같이, 전역 변수는 존재한다. 33 00:01:32,580 --> 00:01:35,575 당신은 그 변수를 선언하면 어떤 기능의 외부, 34 00:01:35,575 --> 00:01:38,290 의 모든 기능 프로그램은 참조 할 수 있습니다. 35 00:01:38,290 --> 00:01:44,010 따라서이 경우에는 내가 강조했습니다 전역 변수 선언 녹색. 36 00:01:44,010 --> 00:01:45,830 이 경우, 중인 변수 선언 37 00:01:45,830 --> 00:01:48,720 단지에 글로벌라고 그것에 대해 매우 명백하다. 38 00:01:48,720 --> 00:01:49,720 그것은 float 형이다. 39 00:01:49,720 --> 00:01:52,940 그리고 나는 그것을 값 0.5050을 지정합니다. 40 00:01:52,940 --> 00:01:58,080 >> 당신은 주와의 것을 알 수 있습니다 트리플, 나는 세계를 참조 할 수 있어요. 41 00:01:58,080 --> 00:02:03,480 그리고 사실, 나는이 프로그램을 통해 이동하는 경우 , 메인 첫 번째 통화 트리플 바와 같이, 42 00:02:03,480 --> 00:02:10,440 (3)에 의한 글로벌 트리플 곱셈, 어느 1.5 일에 그 값을 설정하고, 43 00:02:10,440 --> 00:02:16,080 1.51 또는 같은, 그리고 다음 주에는 값을 출력 44 00:02:16,080 --> 00:02:16,620 글로벌. 45 00:02:16,620 --> 00:02:24,424 0.5050을 인쇄하지 않도록 주, 그것을 , 1.51 글로벌 3 배를 인쇄합니다. 46 00:02:24,424 --> 00:02:27,340 그래서 당신은 할 때 조심해야 돼 당신은 전역 변수와 함께 노력하고 있습니다. 47 00:02:27,340 --> 00:02:30,260 그들은 매우 유연하고있는 동안 정보를 전달할 수있는 48 00:02:30,260 --> 00:02:32,650 주위 있도록 모든 함수를 사용할 수있다, 49 00:02:32,650 --> 00:02:34,580 또한 일부있을 수 있습니다 위험한 결과 50 00:02:34,580 --> 00:02:38,770 하나의 기능을 변경하는 경우 변수 값 51 00:02:38,770 --> 00:02:42,360 예상 전에 변경 될 수 있습니다. 52 00:02:42,360 --> 00:02:44,200 >> 왜 이런 차이는 문제가 무엇입니까? 53 00:02:44,200 --> 00:02:48,070 우리는 왜 상관이야 어떤 변수 여부 로컬 등 글로벌입니까? 54 00:02:48,070 --> 00:02:53,880 그런데, 대부분의 경우, 국소 변수 C의 값에 의해 전달라는 무슨이다 55 00:02:53,880 --> 00:02:56,087 우리는 함수 호출을 할 때. 56 00:02:56,087 --> 00:02:56,920 그게 무슨 뜻 이죠? 57 00:02:56,920 --> 00:03:00,880 >> 음, 변수가 전달 될 때 값, 피 호출자에 의해 어느 58 00:03:00,880 --> 00:03:04,350 함수를 다른 말로이다 즉, 변수를 받고 그 59 00:03:04,350 --> 00:03:08,465 입력으로 전달됩니다, 그것은 실제로 그 변수 자체를 수신하지 않습니다. 60 00:03:08,465 --> 00:03:12,490 그것은 그 자체를 수신 그것의 복사본이 작동한다. 61 00:03:12,490 --> 00:03:14,350 이것은 정말 중요한 차이점이다. 62 00:03:14,350 --> 00:03:18,250 우리는 두 번째 전에 보았다 전역 변수와 그, 63 00:03:18,250 --> 00:03:23,240 우리는 지구를 조작하면 하나의 함수에 변수, 효과 64 00:03:23,240 --> 00:03:26,390 그 하나의 기능을 수행 다른 모든 기능에 이르기까지. 65 00:03:26,390 --> 00:03:28,920 >> 그러나 지역 변수와, 그건 사실이 아니야. 66 00:03:28,920 --> 00:03:32,060 각 기능 때를 입력으로 변수를 수신 67 00:03:32,060 --> 00:03:36,367 이 변수의 사본을 수신, 하지 변수 자체. 68 00:03:36,367 --> 00:03:37,825 그래서의 부작용은 무엇인가? 69 00:03:37,825 --> 00:03:40,450 즉, 즉 변수 발신자, 기능이 70 00:03:40,450 --> 00:03:45,600 함수 호출을하고있다 변경 당신이 그것을 무시하지 않는 한. 71 00:03:45,600 --> 00:03:50,420 >> 예를 들어,이 코드 foo를 전혀 변경되지 않는다. 72 00:03:50,420 --> 00:03:55,450 INT foo는 4와 동일, 트리플 전화 foo는의, 삼중의 내부, 73 00:03:55,450 --> 00:03:58,850 우리는 foo는 것이라고 기대 3을 곱한 및 반환, 74 00:03:58,850 --> 00:04:01,450 하지만 실제로는 아무런 효과가 없습니다. 75 00:04:01,450 --> 00:04:03,460 >> 여기에 비록 아주 미묘한 차이. 76 00:04:03,460 --> 00:04:06,520 이것은 우리가 원하는 효과를 가지고있다. 77 00:04:06,520 --> 00:04:07,730 당신은 왜 보는가? 78 00:04:07,730 --> 00:04:11,500 우리는 주이 시간에 foo는 무시하고있다. 79 00:04:11,500 --> 00:04:16,899 >> 그래서 INT foo는 (4)은, foo는이 동일 동일 트리플 foo는, 우리가 전화를 걸 때, 80 00:04:16,899 --> 00:04:21,680 트리플은 자신의 카피를 가져옵니다 foo는, 4의 자체 복사본의. 81 00:04:21,680 --> 00:04:27,340 그것은 어떤 4 회 (3) 또는 복귀를 말한다 변수는 3 배에 전달됩니다. 82 00:04:27,340 --> 00:04:32,109 그리고 우리는 반환을 할당 트리플의 값은 다시 foo는합니다. 83 00:04:32,109 --> 00:04:33,650 그래서이 실제로 foo에 덮어 쓰기합니다. 84 00:04:33,650 --> 00:04:35,816 이 할 수있는 유일한 방법입니다 지역 변수와이. 85 00:04:35,816 --> 00:04:38,120 그래서 지금 우리가 서로를 추가하는 경우 여기에 코드의 라인 86 00:04:38,120 --> 00:04:40,870 주의 끝에서 , foo는의 값을 출력 87 00:04:40,870 --> 00:04:45,030 이 사실은 (12)를 출력한다. 88 00:04:45,030 --> 00:04:48,600 >> 변수 범위는 일반적으로 문제가 너무 많이하지 89 00:04:48,600 --> 00:04:51,190 당신은 모든 이름을 경우 변수 다른 일을. 90 00:04:51,190 --> 00:04:54,920 하지만 불쾌한의 종류를 얻을 수 있습니다 같은 변수 이름 경우 91 00:04:54,920 --> 00:04:58,820 여러 기능에 나타납니다, 이는 많이 발생합니다. 92 00:04:58,820 --> 00:05:02,130 당신은 이제까지의 작업 않는 경우 현실 세계 어디에 93 00:05:02,130 --> 00:05:06,080 당신은 협력에 최선을 다하고 있습니다 다른 팀에서 프로그램과 사람들 94 00:05:06,080 --> 00:05:11,000 같은를 작성하기 위해 함께 노력하고 있습니다 프로그램 또는 프로그램의 동일한 집합 95 00:05:11,000 --> 00:05:13,900 그들은 자주 변수를 다시 사용할 수 있습니다 이름, 특히 일반적인 것들 96 00:05:13,900 --> 00:05:18,020 그래서 X, Y, I, J, 그리고있다. 97 00:05:18,020 --> 00:05:20,370 >> 그러나 때 변수는있다 동일한 이름, 범위 문제 98 00:05:20,370 --> 00:05:23,080 조금 난이도가 구문 분석 할 수 있습니다. 99 00:05:23,080 --> 00:05:26,790 예를 들어, 당신은 알고있다 무엇을 인쇄 할 것이다 100 00:05:26,790 --> 00:05:30,190 이 특정 프로그램의 끝? 101 00:05:30,190 --> 00:05:31,280 분 정도 걸립니다. 102 00:05:31,280 --> 00:05:33,382 비디오를 일시 중지 및 읽기 이 프로그램을 통해. 103 00:05:33,382 --> 00:05:35,590 당신은 최고 우리에 볼 수 있습니다 함수 선언이 104 00:05:35,590 --> 00:05:37,350 증가라는 기능. 105 00:05:37,350 --> 00:05:40,800 이 함수는 하나의 소요 매개 변수, 우리는 X를 호출하는 정수입니다. 106 00:05:40,800 --> 00:05:42,610 그리고 그것은 정수를 출력합니다. 107 00:05:42,610 --> 00:05:44,820 즉, 처음에 반환 형식입니다. 108 00:05:44,820 --> 00:05:48,140 >> 그 다음 우리는 라인의 주, 몇 가지있다 주요 코드, 그 중 마지막의 109 00:05:48,140 --> 00:05:49,250 인쇄 문이다. 110 00:05:49,250 --> 00:05:51,140 그리고 여기에 질문을 기억하십시오. 111 00:05:51,140 --> 00:05:54,240 어떤 사실이 될 것입니다 이 함수의 끝에 프린트? 112 00:05:54,240 --> 00:05:58,110 그리고 우리는 실제로이 아래의 증가의 정의. 113 00:05:58,110 --> 00:06:01,760 >> 그래서 단계별, 분을 코드는, 물건을 추적. 114 00:06:01,760 --> 00:06:08,100 당신은 인쇄됩니다 무엇을 알고 있는가 이 특정 프로그램의 끝? 115 00:06:08,100 --> 00:06:08,600 >> 괜찮아. 116 00:06:08,600 --> 00:06:11,433 바라건대, 당신은 몇 초 촬영했​​습니다 시도하고이 하나를 구문 분석합니다. 117 00:06:11,433 --> 00:06:13,370 의 그것을 함께하자. 118 00:06:13,370 --> 00:06:16,022 >> 그래서 증가의 밖으로 넘어 섰어 이 상단에 선언. 119 00:06:16,022 --> 00:06:17,230 그것은 산만 가지였다. 120 00:06:17,230 --> 00:06:18,570 그것은 자신의 변수가 아니다. 121 00:06:18,570 --> 00:06:19,879 그것은 자신의 범위가 없다. 122 00:06:19,879 --> 00:06:21,920 그냥 함수의 선언, 그래서 목적 123 00:06:21,920 --> 00:06:24,330 의 무엇을 구문 분석을 시도 이 프로그램에서 일어나고, 124 00:06:24,330 --> 00:06:26,660 우리는뿐만 아니라 단지 그것을 피할 수 있습니다. 125 00:06:26,660 --> 00:06:29,560 >> 이제 우리는이 경우가, 이 문제가 까다 롭습니다 이유 126 00:06:29,560 --> 00:06:34,030 우리의 지역 변수를 가지고 있기 때문에 메인 증가, 모두 각각의 127 00:06:34,030 --> 00:06:35,090 라는 X입니다. 128 00:06:35,090 --> 00:06:39,830 물론이 문제의 핵심이다 x가 변경됩니다 어떤 조사해내는 노력 129 00:06:39,830 --> 00:06:41,890 그리고 그것은 어떻게 바뀌지 않습니다. 130 00:06:41,890 --> 00:06:46,900 그래서 나는 모든 인스턴스 색깔했습니다 X의 주요 빨간색으로 지역의 그. 131 00:06:46,900 --> 00:06:52,040 그리고 나는 모든 인스턴스의 색깔했습니다 X 그 파란색 증가하는 지역이다. 132 00:06:52,040 --> 00:06:55,220 >> 그 세 번째 줄에있는 공지 사항 주의, Y는 증가 동일 133 00:06:55,220 --> 00:07:00,800 X, 그 증가가되지 않는 전달의 주요 X, 또는 빨간색 x. 134 00:07:00,800 --> 00:07:03,320 그것의 복사본을 전달 받고있다. 135 00:07:03,320 --> 00:07:06,987 그리고 그것은 단지와 함께 작동 것 그것의 복사본, 파란색 X. 136 00:07:06,987 --> 00:07:08,820 당신은 수학적 있다면 경사, 당신은 수도 137 00:07:08,820 --> 00:07:14,230 대신에 X 서브로이의 생각 증가 메인과 X 서브 난에 대한 M. 138 00:07:14,230 --> 00:07:15,700 그러나 같은 생각입니다. 139 00:07:15,700 --> 00:07:18,999 X 서브 M, 또는 X 년대 빨간색 이전 슬라이드, 140 00:07:18,999 --> 00:07:21,790 local--있는 변수는 그 대신 x의 인스턴스입니다 141 00:07:21,790 --> 00:07:26,900 주요 로컬이며, X 서브 I, 또는 이전 슬라이드에서 푸른 변수 142 00:07:26,900 --> 00:07:30,760 x의 경우는 그 증가하는 지역이다. 143 00:07:30,760 --> 00:07:36,220 >> 그래서, 당신은 알아낼 수 있었다 무엇 끝이 인쇄 기능? 144 00:07:36,220 --> 00:07:39,420 나는 더그 로이드 해요, 이것은 CS50입니다. 145 00:07:39,420 --> 00:07:41,542