DOUG 로이드 : 시작으로 기능 작동,
다른 일이 될 것입니다 이해하기 정말 중요합니다,
어떤 변수 범위의 개념이다.
그래서 범위는 변수의 특성
그 어떤 함수에서 정의 그 변수에 액세스 할 수 있습니다.
>> C에서 두 가지 기본 범위가 있습니다, 지역 변수와 전역 변수.
지금, 지역 변수가 할 수있는 유일한 함수 내에서 액세스 할 수
하는 그들이 만든 것입니다.
그들은 다른 모든 액세스 할 수 없습니다 프로그램에 존재하는 기능,
만 기능 어떤이 작성되었다.
에 전역 변수, 반면, 액세스 할 수 있습니다
프로그램의 모든 기능에 의해.
그 이유는 그들은 내부에 만들어지지하고 있기 때문에
특정 기능.
우리는 밖에서 그들을 선언 기능의 모두
모든 기능은 위치를 알고 있다는 것을 의미 그것은 액세스하고이를 조작 할 수있다.
>> 지금까지 과정에서 당신은 꽤했습니다 많은 독점적으로 일하고
지역 변수와.
여기의 예는 매우있어 간단한 기본 기능과 매우 간단한
우리가 작성한 부가 기능.
이 경우에는, X 어느 난 그냥 녹색으로 한
지역을 선택하거나 해당 변수의 범위,
트리플 함수에 지역이다.
주 모두에서 X를 참조 할 수 없습니다.
그것은 그것이 무엇인지 알 수 없습니다.
없음 기능, 사실, 우리의 경우 여기에 추가 기능을 가지고
X를 참조 할 수있다.
>> 마찬가지로, 나는했습니다하는 결과 파란색으로 만 주에 지역이다.
만 주요 무엇을 알고 변수 결과이다.
트리플은 사용할 수 없습니다.
>> 지금은 언급 한 바와 같이, 전역 변수는 존재한다.
당신은 그 변수를 선언하면 어떤 기능의 외부,
의 모든 기능 프로그램은 참조 할 수 있습니다.
따라서이 경우에는 내가 강조했습니다 전역 변수 선언 녹색.
이 경우, 중인 변수 선언
단지에 글로벌라고 그것에 대해 매우 명백하다.
그것은 float 형이다.
그리고 나는 그것을 값 0.5050을 지정합니다.
>> 당신은 주와의 것을 알 수 있습니다 트리플, 나는 세계를 참조 할 수 있어요.
그리고 사실, 나는이 프로그램을 통해 이동하는 경우 , 메인 첫 번째 통화 트리플 바와 같이,
(3)에 의한 글로벌 트리플 곱셈, 어느 1.5 일에 그 값을 설정하고,
1.51 또는 같은, 그리고 다음 주에는 값을 출력
글로벌.
0.5050을 인쇄하지 않도록 주, 그것을 , 1.51 글로벌 3 배를 인쇄합니다.
그래서 당신은 할 때 조심해야 돼 당신은 전역 변수와 함께 노력하고 있습니다.
그들은 매우 유연하고있는 동안 정보를 전달할 수있는
주위 있도록 모든 함수를 사용할 수있다,
또한 일부있을 수 있습니다 위험한 결과
하나의 기능을 변경하는 경우 변수 값
예상 전에 변경 될 수 있습니다.
>> 왜 이런 차이는 문제가 무엇입니까?
우리는 왜 상관이야 어떤 변수 여부 로컬 등 글로벌입니까?
그런데, 대부분의 경우, 국소 변수 C의 값에 의해 전달라는 무슨이다
우리는 함수 호출을 할 때.
그게 무슨 뜻 이죠?
>> 음, 변수가 전달 될 때 값, 피 호출자에 의해 어느
함수를 다른 말로이다 즉, 변수를 받고 그
입력으로 전달됩니다, 그것은 실제로 그 변수 자체를 수신하지 않습니다.
그것은 그 자체를 수신 그것의 복사본이 작동한다.
이것은 정말 중요한 차이점이다.
우리는 두 번째 전에 보았다 전역 변수와 그,
우리는 지구를 조작하면 하나의 함수에 변수, 효과
그 하나의 기능을 수행 다른 모든 기능에 이르기까지.
>> 그러나 지역 변수와, 그건 사실이 아니야.
각 기능 때를 입력으로 변수를 수신
이 변수의 사본을 수신, 하지 변수 자체.
그래서의 부작용은 무엇인가?
즉, 즉 변수 발신자, 기능이
함수 호출을하고있다 변경 당신이 그것을 무시하지 않는 한.
>> 예를 들어,이 코드 foo를 전혀 변경되지 않는다.
INT foo는 4와 동일, 트리플 전화 foo는의, 삼중의 내부,
우리는 foo는 것이라고 기대 3을 곱한 및 반환,
하지만 실제로는 아무런 효과가 없습니다.
>> 여기에 비록 아주 미묘한 차이.
이것은 우리가 원하는 효과를 가지고있다.
당신은 왜 보는가?
우리는 주이 시간에 foo는 무시하고있다.
>> 그래서 INT foo는 (4)은, foo는이 동일 동일 트리플 foo는, 우리가 전화를 걸 때,
트리플은 자신의 카피를 가져옵니다 foo는, 4의 자체 복사본의.
그것은 어떤 4 회 (3) 또는 복귀를 말한다 변수는 3 배에 전달됩니다.
그리고 우리는 반환을 할당 트리플의 값은 다시 foo는합니다.
그래서이 실제로 foo에 덮어 쓰기합니다.
이 할 수있는 유일한 방법입니다 지역 변수와이.
그래서 지금 우리가 서로를 추가하는 경우 여기에 코드의 라인
주의 끝에서 , foo는의 값을 출력
이 사실은 (12)를 출력한다.
>> 변수 범위는 일반적으로 문제가 너무 많이하지
당신은 모든 이름을 경우 변수 다른 일을.
하지만 불쾌한의 종류를 얻을 수 있습니다 같은 변수 이름 경우
여러 기능에 나타납니다, 이는 많이 발생합니다.
당신은 이제까지의 작업 않는 경우 현실 세계 어디에
당신은 협력에 최선을 다하고 있습니다 다른 팀에서 프로그램과 사람들
같은를 작성하기 위해 함께 노력하고 있습니다 프로그램 또는 프로그램의 동일한 집합
그들은 자주 변수를 다시 사용할 수 있습니다 이름, 특히 일반적인 것들
그래서 X, Y, I, J, 그리고있다.
>> 그러나 때 변수는있다 동일한 이름, 범위 문제
조금 난이도가 구문 분석 할 수 있습니다.
예를 들어, 당신은 알고있다 무엇을 인쇄 할 것이다
이 특정 프로그램의 끝?
분 정도 걸립니다.
비디오를 일시 중지 및 읽기 이 프로그램을 통해.
당신은 최고 우리에 볼 수 있습니다 함수 선언이
증가라는 기능.
이 함수는 하나의 소요 매개 변수, 우리는 X를 호출하는 정수입니다.
그리고 그것은 정수를 출력합니다.
즉, 처음에 반환 형식입니다.
>> 그 다음 우리는 라인의 주, 몇 가지있다 주요 코드, 그 중 마지막의
인쇄 문이다.
그리고 여기에 질문을 기억하십시오.
어떤 사실이 될 것입니다 이 함수의 끝에 프린트?
그리고 우리는 실제로이 아래의 증가의 정의.
>> 그래서 단계별, 분을 코드는, 물건을 추적.
당신은 인쇄됩니다 무엇을 알고 있는가 이 특정 프로그램의 끝?
>> 괜찮아.
바라건대, 당신은 몇 초 촬영했​​습니다 시도하고이 하나를 구문 분석합니다.
의 그것을 함께하자.
>> 그래서 증가의 밖으로 넘어 섰어 이 상단에 선언.
그것은 산만 가지였다.
그것은 자신의 변수가 아니다.
그것은 자신의 범위가 없다.
그냥 함수의 선언, 그래서 목적
의 무엇을 구문 분석을 시도 이 프로그램에서 일어나고,
우리는뿐만 아니라 단지 그것을 피할 수 있습니다.
>> 이제 우리는이 경우가, 이 문제가 까다 롭습니다 이유
우리의 지역 변수를 가지고 있기 때문에 메인 증가, 모두 각각의
라는 X입니다.
물론이 문제의 핵심이다 x가 변경됩니다 어떤 조사해내는 노력
그리고 그것은 어떻게 바뀌지 않습니다.
그래서 나는 모든 인스턴스 색깔했습니다 X의 주요 빨간색으로 지역의 그.
그리고 나는 모든 인스턴스의 색깔했습니다 X 그 파란색 증가하는 지역이다.
>> 그 세 번째 줄에있는 공지 사항 주의, Y는 증가 동일
X, 그 증가가되지 않는 전달의 주요 X, 또는 빨간색 x.
그것의 복사본을 전달 받고있다.
그리고 그것은 단지와 함께 작동 것 그것의 복사본, 파란색 X.
당신은 수학적 있다면 경사, 당신은 수도
대신에 X 서브로이의 생각 증가 메인과 X 서브 난에 대한 M.
그러나 같은 생각입니다.
X 서브 M, 또는 X 년대 빨간색 이전 슬라이드,
local--있는 변수는 그 대신 x의 인스턴스입니다
주요 로컬이며, X 서브 I, 또는 이전 슬라이드에서 푸른 변수
x의 경우는 그 증가하는 지역이다.
>> 그래서, 당신은 알아낼 수 있었다 무엇 끝이 인쇄 기능?
나는 더그 로이드 해요, 이것은 CS50입니다.