Tip:
Highlight text to annotate it
X
>> 스피커 1 : 안녕하세요 여러분.
우리는 시작하는 것입니다.
나는 사람들이 아직도 갈 생각 높은 필터링 할
그러나 시간의 관심, 그래서 우리는 할 수있다 시간에 여기서 너희들을 얻을,
우리는 시작하는 것입니다.
CS50 퀴즈 0 건의 리뷰에 이렇게 환영.
실현하지 않은 사람을 위해서 아직, 당신은 수요일에 질문이 있습니다.
우 ~ 후.
>> 당신은 시작 아직 공부하거나하지 않은 경우 이 아직 존재한다는 것을 실현하지 않은,
지난 퀴즈에 대한 모든 정보 퀴즈는 cs50.net/quizzes에 있습니다.
거기에 꽤 좋은 물건이있다 지난 10에서 지난 퀴즈
년 정보뿐만 아니라 이 퀴즈 및 주제에 대한
즉 적용됩니다.
그래서 지금 당장 시작하자.
>> 그래서 너희들은 첫 번째를 기억 수도 있습니다 클래스 다윗의 날은 그 램프에 있었다.
그래서 본질적으로, 일어나는 모든 컴퓨터의 후드가 아래에
이진에서 수행.
바이너리는 소리가 무엇을 의미 같은 0과 1.
이 두 값을 가지고 표현 될 수있다.
>> 그러니 섹션의 첫 날처럼 다윗은 빛의 전원을 켜거나
에 나타내는 전구, 또는 1, 우리의 컴퓨터 0과 이진을 이해
1의, ON 또는 OFF.
이진의 기본.
모든 장소가 표시된다 기본이있다.
그래서 당신은에 0에 2를 추가 모든 방법 2 1.
>> 바이너리가에 무엇을 계산하려면 진수, 당신은이 방정식을 따라
일을 입력합니다.
당신은 그 장소의의 1이있는 경우, 당신은 무엇을 곱
그것은에서의 기본 그것을 추가하고, 당신은 소수를 얻을.
그래서 이것은 당신이 계산하는 방법입니다 이진 5.
우리가 어떤 작업을하고 있었는지와 같은 마지막 슬라이드는,이 얼마나 당신이 것
1부터 5까지를 나타냅니다.
>> 마찬가지로, 당신이 추가 할 수 있습니다 좋아 진수 또는 10 진수 빼기 또는
추가 할 수 있습니다에 정말 어떤 자료, 이진에서 뺍니다.
때 당신은 기대 정확히 무엇 그것은 큰 동일한 경우, 두 손가락을 추가
1보다, 당신은 1, 그것은 0 - 수행 다만, 또한 그런 식으로 작업을 수행
같은 당신은 정기적으로 기대 소수 또는 기타 자료.
쿨.
>> 내가 전에 말했듯이 같이, 모든 것을 그 우리의 컴퓨터의 후드 아래에 간다
0과 1, 2 진으로 수행됩니다.
그렇다면 우리는 예를 들어, 표현 하는가, 문자 나 숫자 또는 문자?
그리고 그 대답은 ASCII입니다.
>> ASCII 문자 사이의 매핑입니다 우리는 일반적으로 볼 것
의, B의 같은 영어, C의의는, 대시을 강조하고,
그런 건.
그리고 ASCII 값에 해당 매핑합니다.
ASCII 값은 숫자에 불과하다 컴퓨터에서 이해 될 수있다.
그리고 마찬가지로 당신은 추가 할 수 있습니다 숫자 뺄셈을 수행 할 수 있습니다
ASCII 값으로 그들.
>> 따라서이 예에서, 어떤 이 인쇄됩니다?
그래, 그래서 그냥 공간 B 공간 C 공간 D.는 어디에 마우스는 어디에 있습니까?
당신이 65 int를 정의 할 수 있습니다 알 수 있습니다.
그리고 당신은 사용하여 해당를 인쇄 할 때 %의 C, 그 뜻으로 해석 할 것이다
문자와 A.를 인쇄합니다
>> 마찬가지로 선언 할 수 있습니다 그것은 문자로.
그리고 당신은 퍼센트를 사용하여 인쇄 할 때 C, 그것으로 그 해석합니다
퍼센트 D. 그리고 당신이를 추가 할 수 있습니다와 같은 수, 당신은 문자는 추가 할 수 있습니다
이 경우 ASCII 값.
>> 그래서 사람에 대한 약간의 포인터.
5, 문자열로하지 않습니다 실제로 5와 동일.
그래서 우리는 어떻게 변환 할 수 정수 5 문자열 5?
어떤 아이디어?
그래.
>> 그래서 우리는 문자열로 5이있는 경우, 우리는 0을 뺄 수 있습니다.
그리고 우리에게 5 줄 것이다.
마찬가지로, 우리는로 5이있는 경우 정수, 문자열 0으로 그를 추가합니다.
그리고 우리에게 문자열을 준다 5.
쿨.
>> 이제 한 곳을 강의를 다시 불러 우리는 알고리즘에 대해 이야기했다.
그렇다면 우리는 실제로 컴퓨터 싶어 재미있는 일을 할까?
당신은 추가하거나 빼서, 알고 숫자와 인쇄 것들을 밖으로 아니다
그 흥미 진진한.
보통, 우리는 우리의 컴퓨터에 원하는 알고리즘의 일종을 수행합니다.
뭔가 좀 더 복잡한 단순한 산술 연산.
>> 알고리즘은 단계 세트로 단 단계 수행하는 방법에 대한 지침의
특정 작업 -
다만 조리법을 좋아한다.
당신의 첫 번째 날을 기억하고 있습니다 다윗은 우리가 방을 계산 한 클래스
사람과 얼마나 많은 사람들의 방에 있었다.
당신은 계산에 사용될 수 있습니다 하나 하나.
1, 2, 3, 4.
그 경우에있어서, 선형 시간 알고리즘.
>> 그러나 다윗에 대한 알고리즘을 도입 당신이 방에있는 사람들을 계산하려면
모두가 두드러지는, 당신이 말하는 당신의 다른 사람에게 번호, 그 추가
수까지, 한 사람은 앉아.
그리고 당신은 그것을 반복합니다.
즉, 알고리즘의 한 종류입니다.
우리는 분석 할 수있는 방법을 효율적으로 이 시간을 실행에있어 알고리즘을 기반으로합니다.
그러나 우리는 조금 얘기하자 나중에 대한 자세한.
>> 그래서 모든 알고리즘은 수 의사 코드로 작성 될 수있다.
의사는 단지 영어 등입니다 나타내는 데 사용되는 구문
프로그래밍 언어입니다.
예를 들어, 우리는 사용자에게 물어보고 싶은게 있다면 내가 좋아하는 번호를 추측하기 위해,
같은 의사가있을 수 있습니다.
>> 사용자는 추측을 받으세요.
추측이 맞다면, 그들에게 그들이 올바른있어, 다른 그들에게
그들은 올바른 아니에요.
그리고 의사 쉽게의 방법 아이디어 또는 알고리즘을 나타내는.
그래서 지금 우리는 실제로 작성 할 수 있습니다 이 언어로하는 컴퓨터
이해 수 있습니다.
그래서 우리는 우리의 의사를 작성하고 수 소스 코드에 그 해석.
>> 지금까지 소스 코드를 준수해야 특정 구문
프로그래밍 언어입니다.
그리고 지금까지, CS50, 우리는했습니다 주로 C를 사용하고.
그래서이 C 소스 코드 일 수 있습니다.
나중에하는 과정에서, 당신은 밤 올 다른 프로그램과의 접촉으로
PHP와 같은 언어.
또는 당신은 다른 클래스, 당신을 데려 갈 경우 자바, 파이썬, 또는 OCML 작업을 수행 할 수 있습니다.
그러나 우리의 C 프로그램 언어로,이는 우리의 소스 코드를 작성하는 방법
의사 알고리즘이 난 그냥 앞에서 설명한.
>> 어떻게 컴퓨터가 실제로 수행 그것을 이해?
같은 난 단지 정말, 전에 말했듯이 0과 1을 이해한다.
그래서 어떻게 소스에서 얻을 않습니다 할 수있는 일에 대한 코드
이해?
음, 우리는 뭔가를 컴파일러했다.
>> 당신은 당신의 대부분에서 다시 기억한다면 psets를, 당신은 프로그램의 일종을했다
점 C 파일에 기록.
그리고 당신은 메이크업을 입력합니다.
그래서 무슨 일을하게됩니까?
>> 당신은 컴파일 할 수 있도록 입력 할 수 있습니다 프로그램 사람 때문에 -
누구는 P 세트를 썼다; 아마 데이비드 -
메이크 파일을 만들었습니다.
그리고 그 실행 알 수 있도록 알려주는 컴파일러라는 그 소리, 그 뜻
다음 개체에 대한 소스 코드를 컴파일 0과 1입니다 코드
컴퓨터가 이해하는.
그러나 조금 나중에, 우리가 갈 것입니다 컴파일러에 대한 깊이있는 정보를 제공합니다.
>> 예 - 어디, PSET 0 리콜 당신은 질문이?
>> 청중 : [들리지?
>> 스피커 1 : 예.
생각들이 실제로 온라인으로해야한다.
그래.
>> 청중 : 그것은 [청취] 같은가요?
>> 스피커 1 : 그것은 아닙니다.
이 cs50.net/quizzes에 있습니다.
>> 대상 : 2013 년 슬래시, 퀴즈 슬래시 0 슬래시, 그냥 클릭을 통해
퀴즈 2013 퀴즈 0, 섹션 슬라이드를 검토합니다.
>> 스피커 1 : 그래, 너희들이 원하는 경우 그것을 당겨에보고하여
자신의 컴퓨터, 너무 좋아.
다시 말해봐.
>> 청중 : [청취].
>> 스피커 1 : 네, [청취] 더미 변수이다.
아, 그래?
>> 청중 : [들리지?
>> 스피커 1 : 아니, 파업 시험에 없습니다.
죄송합니다, 그녀의 질문은,이었다 시험에 파업.
그리고 그것은 아닙니다.
그래서 PSET 0, 너희들은 모두이 있어야합니다 스크래치를 사용하여 뭔가를 구현했습니다.
그리고 우리는 몇 가지 기본적인 프로그래밍을 배웠습니다 빌딩 블록 스크래치를 사용하여.
>> 그럼 몇 가지를 살펴 보자 이러한 빌딩 블록
프로그램을 구성하는.
첫 번째는 부울 식입니다.
부울 표현식은 사람이며, 0의 또는이 무엇이든
두 가지 값.
이 경우, 참 또는 거짓 또는 해제하고, 예 또는 아니오.
간단한 예를 들면, 매우 간단한 부울을 사용하는 프로그램
여기에 표현입니다.
>> 그래서 부울 식의 순서 유용, 우리는 부울 연산자가있다.
이들은 사용될 수있다 연산자 특정 값을 비교합니다.
그래서 우리는 그 이하를 가지고 여부 보다 혹은보다 크거나, 같
에 해당하고,보다 나보다.
그러나 이러한 연산자는 매우 유용하지 않다 우리는로 결합하지 않는 한
조건.
>> 그래서 너희들은 처음부터 기억하고 있습니다 와 P에서 설정 우리
조건을 가지고 있었다.
그들은에서 포크처럼, 본질적이다 프로그램의 로직이
인지에 따라 실행 조건이 충족됩니다.
그래서 우리가 가진 조건 중 하나 이 과정에서 여러 번 사용할입니다
또, 만약, 만약, 그리고 다른 조건.
>> 방법은 다음의 예 당신은을 사용할 수 있습니다.
사람의 차이를 알고 있나요 그냥 사용하는 경우 문을 모두
길 아래 구절 경우, 다른, 경우, 그리고 다른 결합?
예?
>> 청중 : [청취].
>> 스피커 1 : 그렇지.
나는했다 그렇다면 모든 방법이 아래 경우 방법도이 상태가 반환하는 경우
사실, 아직 계속 다음 두 가지를 테스트.
또 만약, 다른있는 반면, 문 하나가 true를 반환하는 경우,
다른 사람은 테스트하지 않습니다.
그것에 대해 질문?
쿨.
>> 그래서 당신은 다른 사람의 경우 - 다른 사람을 사용하여 당신은 그것이 단지 수 알고 if 문
이러한 경우 중 하나.
그래서 우리는 X가 0보다 작은 경우, 그것은 알고 확실히 될 수 없습니다
0보다 크다.
>> 다음, 다른 빌딩 블록 배운 우리는 루프 것을.
우리는 루프의 세 가지 유형이있다.
루프, 루프 동안, 그리고 while 루프 않습니다.
일반적으로, 당신은 앉아서 할 때 뭔가를 쓰고, 당신은 결정해야
당신이 사용하고 싶은 세 가지있다.
그렇다면 우리는 어느 하나를 결정합니까?
>> 우리가 알고있는 경우에 우리는 일반적으로 루프를 사용 우리는 반복하는 방법을 여러 번
무언가 또는 얼마나 많은 시간을 통해 우리는 작업을 수행합니다.
우리는 몇 가지를 필요로하는 경우에 우리는 동안 루프를 사용 프로그램을 계속 실행 사실이있는 상태.
그리고 우리는 이렇게 사용하는 동안 매우 유사 하지만, 그러나 우리는 우리의 코드를 실행하려면
한 번 이상.
>> 그래서 동안, 어떤이 할 일에 할 것 항상 한 번 이상 실행합니다.
동안과, 반면에, 그 전혀 실행되지 않을 경우
조건이 만족되지 않는다.
그와 질문?
>> 루프의 그래서 구조.
너희들은이 모든 것을 볼 수있다.
당신은 그것을 초기화합니다.
당신은 조건의 어떤 종류가있다.
따라서, 예를 들어, 우리는 초기화 할 수 있습니다 등 내가 0 같습니다.
나는 10 미만이다.
그리고 나는 + +.
우리가 한 매우 간단 하나.
>> while 루프의 경우와 마찬가지로, 당신은이 초기화의 일종을 가지고,
어떤 조건의 종류 및 업데이트의 일종.
그래서 우리는 또한 우리에 대한 루프를 구현할 수 있습니다 이를 사용하여 while 루프로.
마찬가지로 DO와 while 루프, 우리는 몇 가지 초기화를해야 할 수도 있습니다,
뭔가를 실행을 업데이트하고, 다음 조건을 확인하십시오.
>> 이제 기능.
우리는 모든 것을 함께 넣어.
우리는 몇 가지를 작성 할 수 있습니다 기능의 일종.
공통 기능 당신이 수도 본은 이미 주입니다.
주요 기능입니다.
그것은 반환 형식 INT 있습니다.
그것은 주요 함수 이름을 가지고 있습니다.
그리고 인수 argc와 argv에 있습니다.
그래서 주요 단지 기능입니다.
>> 당신이 사용하고 있습니다 다른 기능, printf의 -의 printf 함수입니다 -
getInt를 toupper 변환.
그러나 이들은했습니다 일이 저희 구현
라이브러리의 일종.
너희들은 포함 기억한다면 이 CS50.h 라이브러리 또는
표준 I / O 라이브러리.
네, 질문?
>> 청중 : C 단지 고유의 메인인가?
합니까 그것은 단지 종류의 [들리지?
>> 스피커 1 : 문제는 메인은 C에 내재되어있는 경우.
그리고 네, 모든 기능 주요 기능이있다.
그것은 컴퓨터의 종류의 필요에의 시작 위치를 알 수 있습니다
코드를 실행.
>> 청중 : 그래서 당신은 할 수 없습니다 [들리지?
>> 스피커 1 호
다른 질문?
쿨.
그래서 당신을 좋아하는이 기능을 사용할 수 있습니다 즉 당신은 또한 당신을 위해 할 수 있습니다 쓰여있어
자신의 함수를 작성합니다.
이 기능입니다 누군가가 수도 부피를 계산하는 작성한
질문의 예를 들어.
여기서 반환 형식이 경우, 거기 중간, 우리의 함수 이름의 Q와 우리
매개 변수의 목록입니다.
>> 그리고 당신은 데이터를 기록 할 필요가 있습니다 당신이 원하는 매개 변수의 유형
사용하거나 다른 기능은하지 않습니다 알고있는 종류의
매개 변수는 내가 접수한다.
그래서, 이런 경우에, 우리는 원하는 우리의 입력으로 정수입니다.
그럼 왜 우리는 기능을 사용할 수 있습니다?
>> 우선, 조직을 위해 중대한.
그들은 당신의 코드로를 파괴하는 데 도움이 더 많은 청크를 조직합니다
그것은 쉽게 읽을 수 있습니다.
단순화.
이 디자인에 적합합니다.
당신은 코드의 조각을 읽는 경우 및 주요 기능은, 실제로
정말 긴, 그것은에 어렵게 될 수도 있습니다 무슨 일이 일어나고 있는지에 대한 이유.
그래서 당신이 그것을 함수로 분해하면, 그것은 쉽게 읽을 수 있습니다.
그리고 재사용 - 능력.
당신은 인 된 코드의 덩어리가있는 경우 호출 또는 여러 번 실행
대신 그 코드 10 번을 재 작성 메인 함수에서, 당신은 수도
다시 사용하려고합니다.
그리고 그 때마다 당신은을 사용할 필요가 코드 조각은 함수를 호출합니다.
>> 그래서 지금 우리는 다시 처음에 기억한다면 우리는 또한 몇 가지 개념에 대해 얘기
하나는 쓰레딩된다.
스레드는 다수의 개념 코드 시퀀스
동시에 실행.
그래서 날 다윗이 있었다 하나 다시 생각한다 너희들의 수를 계산
방에있는 사람.
>> 기본적으로, 어떤 일이 진행되었다 너희들 모두가 있었다됩니다에
별도의 스레드를 실행.
그리고 그 스레드가 함께오고 있었다 대답은 어떤 종류의를 얻을 수 있습니다.
이와 유사하게, 스크래치, 당신은이있을 때 스프라이트, 당신은 수도
고양이와 개를 가지고.
그리고 그들은 동시에 것 자신의 스크립트를 실행.
즉, 스레딩의 예입니다.
>> 그리고 한 다른 개념 처음에 소개 된 사건이었다.
그리고 이벤트는 여러 부분의 때입니다 코드가 서로 통신 할 수 있습니다.
당신이 사용하는 경우 스크래치,이이었다 컨트롤과 언제 방송
블록을받을 수 있습니다.
>> 또한, 문제 설정 4, 우리는 보았다 뿐만 아니라 이벤트의 약간.
너희들은 사용하고 있습니다 Gevent 라이브러리.
그리고 기능이 있었다 waitForClick 당신이 기다리고있는
사용자가 클릭 할.
그리고 당신의 클릭,이 경우 일 것 이벤트와 클릭을 기다리는는 당신의
이벤트 핸들러.
>> 그리고 또한 당신의 psets를 실행에 걸쳐 당신은, 당신의 psets를 작업
과의 접촉으로 올 수도 이 명령의 일부.
이것은 당신이에 입력 한 내용과 당신의 터미널 창 또는 어떤 창
즉, 당신의 G 편집에 나타 기본적으로 컴퓨터를 이동합니다.
>> 그래서 예를 들어, LS는 나열 디렉토리의 내용을 표시합니다.
디렉토리에 새 폴더를 생성합니다.
CD 디렉토리를 변경합니다.
RM, 제거, 파일을 삭제 또는 일부 디렉토리.
다음 디렉토리를 제거 디렉토리를 제거합니다.
>> 청중 : [들리지?
>> 스피커 1 : 네, 그럼요.
당신이 경우 죄송합니다, 질문은 이 퍼팅 제안
컨닝 페이퍼에.
그것은 도움이됩니다.
당신이 방에 있다면, 당신은 그것을 넣을 수 있습니다.
또한 충분한 그냥 일반적으로 좋은 당신이 그것을 사용하는 경우 때문에 기억
당신은 할 수 있습니다 단지 그것은 기억했다.
즉, 당신의 인생을 더 쉽게 만들 수 있습니다.
나는 당신의 질문에 대답 했습니까?
>> 그래서 지금, 우리는 조금 이야기 라이브러리에 대한 잠깐.
하지만 우리가했던 두 가지 주요 것들 물론, 지금까지 사용되어
기본 I / O 및 CS50.
포함 된 것들 중 어떤 종류의 표준 I / O 라이브러리?
>> 네, 지금까지 우리의 printf를 사용했습니다.
CS50, 우리는 getInt를 사용했습니다 그리고하는 GetString.
그리고 데이터 타입 캐릭터도 발생 이 CS50 라이브러리에 선언합니다.
우리는에 대해 깊이 조금 더 이야기 할 것 어떻게 라이브러리를 작동하고 어떻게
코드의 나머지 부분과 상호 작용합니다.
하지만 사람들은 우리 두 가지 것들 지금까지의과 접촉했다
과정.
>> 유형.
이 기억하는 좋은 방법을 많이 각 유형은 방법이나 표현
많은 유형의 각 필요한 바이트 -
중간, 4 바이트, 문자, 1 바이트.
주식 비율은 4 바이트입니다.
두 배는 무엇입니까?
>> 청중 : [청취].
>> 스피커 1 : 그래, 플로트 그러나 크기를 두배로한다.
얼마나 긴 어떻습니까?
>> 청중 : [청취].
>> 스피커 1 : OK.
길이는 무엇입니까?
>> 청중 : [청취].
>> 스피커 1 : 그래, int를 두 번.
예.
>> 청중 : [청취].
>> 스피커 1 : 긴 [청취].
그리고는 긴 긴 두 배입니다.
>> 청중 : 아니, 아니.
긴은 int입니다.
이 아키텍처에 따라 달라집니다 전에 들리지]
및 INT는 동일한 크기를 갖는다.
[청취].
>> 스피커 1 : 그래서 긴 INT는 동일합니다.
그리고 오래 오래 더블 int입니다.
쿨.
그리고, 마지막 유형은 무엇입니까?
>> 청중 : 포인터.
>> 스피커 1 : 그래, 그래서 우리는 배웠다 포인터에 대해 조금.
에 관계없이 포인터가 무엇 가리키는 - 그 것은 문자 스타가 될 수있다
또는 INT 스타 -
항상 포인터 4 바이트입니다.
그에 대한 질문?
예?
>> 청중 : [들리지?
>> 스피커 1 : 그래서 긴 INT는 이 CS50 기기에서 동일한.
>> 청중 : 어플라이언스는 완전하게 교환.
>> 스피커 1 : 네.
그럼 긴 긴 두 배 INT입니다.
>> 청중 :이 32 비트입니까?
>> 스피커 1 : 32 비트, 그래.
>> 청중 : 그래서 [들리지?
>> 스피커 1 : 예, 그것은하지 않는 경우 명시 적으로는, 말
32 비트를 가정해야합니다.
>> 청중 : 그것은 무언가를 말할 것입니다 가정 등
기기와 같은 구조.
64 비트의 경우, 유일한 일이 변화는 long과 포인터입니다.
둘 다 [청취].
>> 스피커 1 : 그래?
>> 청중 : 질문.
그래서 연습 퀴즈 중 하나에, 그것은 서명 int에 대해 묻습니다.
어떻게 그가 결정된다 [청취] int에서?
>> 스피커 1 : 부호 의는 4 바이트입니다.
그러나이 서명에 대해 다른 int는 부호없는 INT?
>> 청중 : [청취].
>> 스피커 1 : 오른쪽.
하나는 음의 값을 나타낼 수 있습니다.
하지만 어떻게 그 일을합니까?
>> 청중 : [청취].
>> 스피커 1 : 네, 1을 저장 부호를 나타내는 비트.
서명은 하나의 비트를 가지고 부호를 나타냅니다.
그리고 서명은 모두 긍정적이다.
>> 청중 : OK.
그래서 당신은 두 번이라고 말할 플로트의 두 배 크기?
>> 스피커 1 : 두 배는 두 배 부동의 크기, 예.
>> 청중 : 어떻게 포인터 에 오래 오래 [들리지?
>> 스피커 1 : 그래서 질문은 어떻게하는지입니다 오래 오래 포인터 -
방법입니다 만 4 바이트 때 긴 길이의 8 바이트.
그래서 포인터 기억, 본질적으로, 아주 기본 가치.
>> 청중 : [청취].
>> 스피커 1 : 그래, 포인터 단지 메모리 위치입니다.
그래서 그것은 중요하지 않습니다 얼마나 많은 공간이 그 포인터가 가리키는.
그것은 단지 알아볼 수 4 바이트가 필요 그 메모리 위치.
다른 질문?
쿨.
>> 내가 가지고 그래서 마지막으로 표준 출력입니다.
당신이 그들을 자주 사용한다 당신이 기억할 수있을만큼.
우리가 사용하는 경우 그러나 이것은이다 printf의 예를 들어.
그리고 우리는이 자리를 가질 수 형식 코드라고했다.
>> 그래서 %의 C의 문자, 퍼센트 나 INT에 대한, 우리는 또한 퍼센트 D를 사용할 수 있습니다.
그것은 같은 것입니다.
그러나, 일반적으로,에 CS50의 우리 %의 I를 사용하려고합니다.
플로트에 대한 백분율 F.
긴 길이에 대한 백분율 LD 문자열에 대한 퍼센트의.
>> 마찬가지로, 우리는 몇 가지를 사용하고있다 이러한 이스케이프 시퀀스.
예를 들어, 새로운 라인 백 슬래시 명.
이것은 당신이 포맷 할 때입니다 인쇄 F에 대한 코드.
예?
>> 청중 : 용 %의 D는 무엇입니까?
>> 스피커 1 : 그래서 질문 에 대한 %의 D는 무엇입니까?
퍼센트 (D)는 정수입니다.
비율 D와 %는 내가 동일합니다.
>> 청중 : 차이 무엇입니까 백 슬래시 n 및 백 슬래시 R?
>> 스피커 1 : 그래서 질문은 무엇입니다 백래쉬 N과의 차이
반동 R?
나는 백 슬래시 R은 생각 -
>> 청중 : 그래서 백 슬래시 R은 의미 줄의 처음으로 돌아갑니다
실제로 새로운 라인에 가지 않고.
그래서 당신은 백 슬래시 R을 인쇄하고있는 경우 줄의 시작 부분으로 돌아가
당신은 더 많은 물건을 인쇄, 당신은 덮어 이미의 물건
[청취].
반면, N 실제로 새로 이동 라인과는 들리지]로 이동합니다.
>> 스피커 1 : 음, 다른 질문?
괜찮아요.
나는 그것을 넘겨거야 댄 사람은 계속됩니다.
>> [박수]
>> DAN : 모두 좋아요.
그래서 다른 넓은에 대해 이야기 할 것이다 된 클래스에서 아이디어의 범위
대략 일주일에 두 대표 주일의 시작은 오프 시작
단지 방법입니다 주조와 같은 특정 유형의 값을 치료
다른 유형의 값.
그래서 우리는 문자로이 작업을 수행 할 수 있습니다 정수, 정수에 수레와
두 배로 오래 걷고.
>> 이러한 모든 일들은 여러 가지 방법으로 사용할 수 있습니다 일부 숫자 값의 처리
마이너스 다른 같은 문자 숫자 값입니다.
그래서이 몇 가지 문제는 다음으로,가 당신이 캐스팅 할 때 온다 물론,
정수로 플로트 같은 것들.
그래서이 이상하다.
우리는 1.31이다 플로트가있다.
우리는 10,000을 곱합니다.
그리고 우리는 INT로 인쇄 할 수 있습니다.
어떻게이 출력을합니까?
10,000 회 1.31.
그래서 13,000이며, 그 추측?
>> 청중 : 나는 그것이 10,000 생각합니다.
>> DAN : 그래서 10,000을 곱 해요 나는 캐스팅있어 전에.
>> 청중 : 아.
있을 수없는 것 하나 9 일부 0 숫자?
>> DAN : 당신은 몇 가지 이상한 숫자가있을 수 있습니다.
그래서 오른쪽은 1.3 배 10,000이다.
그래서 13,000입니다.
그리고이 여분 이상 -
>> 청중 : 13,100.
>> DAN : 13,100.
롭 감사합니다.
이 여분의 불가사의 -
이 9,9 -
이기 때문에이 주조 아래 반올림 결국 곳
그것은 필요가 없습니다.
그래.
>> 청중 : 주조 발생 무엇 후?
>> 나는 인쇄이있다 그래서 있기 때문에 : DAN 그 전에 곱셈을 수행
이 캐스팅을 수행합니다.
>> 청중 : [청취].
>> DAN : 내가 먼저 캐스팅 것이라고 생각 그래, 할 만 할 것이다.
다른 건?
쿨.
그래서이 13,099입니다.
그 이유는 무엇입니까?
부정확.
>> 수레는 완벽하지 않다.
그들은 단지에 숫자를 나타낼 수 있습니다 유효 숫자의 특정 번호.
우리는 8 시그 무화과를 인쇄이 경우 이 Float, 우리는 종류의를 얻을 수
추한 찾고 번호.
그리고 그건 1.31 정확하게 할 수 없기 때문에 간단한 표현 될
기계의 2의 거듭 제곱.
그래서 가장 가까운 복용 종료 최대 끝나는 추측
조금 낮은 것.
이해가가?
OK.
>> 이제, 스위칭은 다른 방식이다 조건문을하는 곳을 모두
우리가 걱정하는 것은 하나의 변수입니다.
그래서이 특정 예에서, 우린 사용자로부터 정수를 받고.
그리고 우리가보고있는 그 무엇 정수입니다.
아마, 그것은 수의 하나와 네 사이.
즉, 우리가 무엇을 요구하는지이다.
>> 그래서 당신의 전환을 변수 이름입니다.
그럼 당신은 수의 경우 설정 그것이 될 수있는 값.
그래서 하나의 경우는 낮은 말할.
그리고 당신은 나가 휴식 스위치 조건 때문에
당신은 계속하지 않습니다.
>> 다음의 경우 -
그래서 경우 둘 경우 세 -
이 경우 두 가지의 경우 단지까지 할인 코드의 첫 번째 라인은 그와 같이 본다
그것은 휴식을 볼 때까지 세 케이스.
그래서 당신이 경우 하나를 얻을 이유 만 인쇄 낮은 때문에
여기에이 브레이크를 사용합니다.
I, 말,이 틈을 무시하는 경우 - 나는이 이탈을 던졌다 경우 -
그것은 낮은 인쇄 것이고, 그때는 것 중간을 인쇄 한 다음 휴식 것이다.
>> 그래서 휴식은 중요한 부분입니다 의 조건을 전환
그들은이 있어야합니다.
명시 적으로 언급되지 않은 경우 기본적으로 처리됩니다
스위치 케이스 및 캐스팅해야합니다.
>> 청중 : 그래서 1, 2, 3, 4는 N 것입니까?
>> DAN : 해당 할 수있는 값.
예.
그래?
>> 청중 : 그래서 당신이있을 때 [들림] 그?
>> DAN : 그런 다음 낮은 인쇄 한 것 그것은 중간을 인쇄 한 것
다음 휴식 것이다.
>> 청중 : 왜 인쇄 할 것 중간 들리지] 경우?
>> DAN : 경우에 따라 그래서 모든 휴식에 해당하기 전에.
그래서 경우 하나의 인쇄는 아래 경우입니다 로 한이 다음 인쇄합니다.
그래?
>> 청중 : [들리지?
>> DAN : 그래서이 숫자는 단지 특정입니다 값이이 변수
바로, 할 수 있지?
그 의미가 있습니까?
그래.
>> 청중 : [들리지?
>> DAN : 예, 경우 두 개의 인쇄 것 휴식 후, 중간.
>> 청중 : [들리지?
>> DAN : 어떤 생각?
어떤 다른 데이터 유형 당신은 전환 할 수 있습니다?
>> 청중 : 당신은 전환 할 수 있습니다 어떤 통해 데이터 유형.
그러나 그것은 단지 문자에 무슨 의미가 및 정수와 같은 것들 때문에
당신은 포인터를 통해 전환하는 경우 정말 이해가되지 않습니다,
그것도 할 경우의, 부하를 통해 전환 당신 때문에 부동 소수점으로, 그렇게
정밀도, 당신은 정말 것 어쨌든 그렇게하려고합니다.
그래서 꽤 많은 단지 정수와 같은 문자와 물건.
>> DAN : 당신이 명시 적으로있을 때 네,의 당신이 알고있는 값은, 제가 생각하기에, 할 수있다
스위치는 실제로 유용하다는 것을.
좋은?
OK.
>> 범위는 선언 된 범위 변수를 확장합니다.
따라서 코드의이 작은 덩어리에서 내가 가진, 그것은 오류가 가득 차있을 것이다.
그리고 그 이유는이 INT를 선언 이 루프의 범위 내에서 전.
그리고 나서 참조하기 위해 노력하고있어 그 외부 루프의 범위에 대한 그 전.
>> 그러니까 기본적으로, 당신은 범위에 대해 생각 할 수 있습니다 당신이 선언 더없이
중괄호 세트 안에 만 그 괄호 안에 존재합니다.
그리고 당신은 그 변수를 시도하고 사용하는 경우 그 중괄호 외부에, 당신은거야
컴파일러에서 오류가 발생합니다.
그래?
>> 청중 : 그래서이 하나가 작동하지 않는 이유는 무엇입니까?
>> DAN :이 예, 작동하지 않습니다.
문자열.
문자열 문자 *.
그들은 정확히 같은입니다.
그들은 문자 그대로 포인터입니다.
그리고 당신이 가진 모든 문자열을 종료해야 단지입니다 백 슬래시 제로와
C 규칙입니다.
>> 그것은 NULL 종료라고합니다.
그리고 NULL -
자본 N, U 자본, 자본 L, 자본 L -
과 동일하지 않습니다 NULL 종료.
이 포인터입니다.
이것은 문자입니다.
그들은 매우 독특한 있습니다.
그것을 기억하십시오.
아마, 퀴즈에있을 것입니다.
나는 퀴즈를 보지 못했다.
그래?
>> 청중 : 그래서 NULL 포인터가, 말, 무엇입니까?
>> DAN : 예.
>> 청중 : [청취] 무엇을합니까?
>> DAN : malloc에이 때 호출되는, 말, 경우 얻을 수있는 메모리가 충분하지 않습니다
당신이 요구하는 어떤 크기 의 malloc이 NULL을 반환합니다.
함수가있을 때마다 그것은, 기본적으로,의 당신은 포인터를 반환하는데
NULL에 대해 검사 할 필요가 있기 때문에 NULL은 아주 좋은 것입니다 -
그것은 종류의 쓰레기 값입니다.
그것은 지금까지 포인터 이동으로 제로이다.
>> 당신은 함수를 호출 할 때마다, 그 포인터를 반환한다.
당신은 것으로 확인하려는거야 그 포인터가 NULL이 아닌지 확인
NULL은 매우 일반적이기 때문이다.
그것은 종류의 쓰레기 반환합니다.
그래서 뭔가를 잘 이동하지 않은 경우, 대신에 그냥 NULL을 반환.
>> 청중 : [들리지?
>> DAN : 예, 그리고이 있습니다.
>> 청중 : [들리지?
>> DAN : 그것은이 같은 주문.
그것은 NULL 종료합니다.
그것은 N-U-L-L의 경우 소문자 것 당신은 맞춤법 검사입니다.
>> 청중 : 그리고 난 그냥 갔다 다시 그것을 시험했다.
그리고 당신은 부동 소수점을 넣어하려고하면 스위치에 가치, 그것은 당신을 소리 것
말, 문은 식을 필요로 정수 유형의.
>> 댄 : 거기 당신은 간다.
하지만 그래, 문제는 또 무엇인가?
>> 청중 : [들리지?
>> DAN : 그래서 자본 N, U 자본, 자본 L은 자본 L은 실제 C의 것입니다.
그것은 NULL 포인터와 것 그러한으로 처리.
당신은 시도하고 주문하지 않습니다 NULL 문자 및 참조
이 이외의 방법입니다.
그래?
>> 청중 : 그래서 최대 숯불에 돌려 보내거나 노트에 뭔가 것 그것
동일한 기능을 구현 [청취]로?
>> 청중 : 그래서 당신이 언급하는 반환 문자 getchar가에서 최대, 또는
그것은 무엇이든?
>> 청중 : 네.
>> 청중 : 네, 일반적으로 이렇게 그 모든 것들에 대한 용어
센티넬 값입니다.
그래서의 getInt에서 INT 최대를 반환 등 와 getchar가에서 문자 최대, 그건
, 좋아, 같이 있어야하는 경우 이런 일들은 우리에게 반환하는
뭔가 잘못되었다.
>> 포인터를 위해, 우리는 단지이 일이 이 센티널 값이 모두
에 동의합니다.
그리고 이것은 당신이 돌아 것입니다 일이 잘못되면.
그래서 문자 최대 우리가 사용하는 것입니다 뭔가를 표현하는
NULL 또는 getchar가있다.
>> 청중 : 그래서 당신은 getchar가 테스트를하는 경우, 당신은 NULL을 넣을 수 있을까?
그 차이를 만들 것입니다?
>> DAN : 당신은 그냥 NULL을 확인하지 못했습니다.
당신은 문자 최대를 확인해야 할 것 때문에 함수의 반환 값은
문자가 아닌 포인터.
그래?
>> 청중 :이 질문은 묻는다 문자열의 길이.
즉 NULL 문자를 포함합니까?
>> DAN : 호
그리고 실제로 어떻게 문자열 길이의 그것은 통과하기 때문에 중지 알고
문자까지의 배열 그것은 NULL 문자를 본다.
그리고, 그것은 모두처럼, 바로, 내가 다 했어.
>> 청중 : [들리지 5]?
>> 댄 : 안녕하세요 다섯 것이다.
네.
그래서 어레이는 연속 메모리 블록.
그들은 말에 즉시 액세스 할 곱슬에, 다음 배열의 이름을 지정하고
당신이 가고 싶은대로 인덱스 중괄호, , 그들은을 통해 0부터 인덱스입니다하기
한 마이너스 배열의 길이.
>> 그리고 그들은 유형으로 선언되고 당신에 저장하는 것
다음 어레이, 어레이의 이름 및 크기는 그 배열의 무엇이든.
그래서이 길이의 문자 배열이다 이 값이 여섯.
그래?
>> 청중 : [들리지?
>> DAN : 네.
>> 청중 : [들리지?
>> DAN : 당신은 무슨 일이있는 경우 배열이 이미 만든으로.
그래서 대신으로 이것을 지정할 수 , 문자, 말의 어떤 이름하여
배열이 빈 괄호가 곱슬 동일입니다 중괄호 H 쉼표 E 쉼표 L 쉼표 L 쉼표
O 콤마 NULL 문자 와 중괄호.
그것도 선언으로 작동합니다.
>> 청중 : [들리지?
>> DAN : 그럼 당신이 필요합니다 크기는 이미했다.
>> 청중 : [들리지?
>> DAN : 예.
모든 좋아요.
명령 줄 인수는 방법입니다 등의 사용자로부터 입력을 받고
주요 인수.
홈페이지는 두 개의 인수를 사용합니다.
되고있는 인수의 수 명령 줄과 함께 전달
문자열 벡터 또는 문자열 배열 모든 인수의.
>> 나는, 말, 같은 함수를 호출 그렇다면 1 공간, 2 개의 공간, 세, 중 점
ARGC 4 것입니다.
그리고 ARGV 0 중 점 것입니다.
Argv1 1 것이다.
argv2 2 될 것입니다. argv3 것 3, 특정 경우에.
그래?
>> 청중 : [들리지?
>> DAN : 배열의 마지막 요소 배열 길이는 argc 플러스이기 때문에
ARGB 중 하나, 마지막 요소 NULL 포인터입니다.
그것은 ARGC에 1을 더한 것입니다.
그래서 경우에 난 그냥은 말했다 0 argv를 할 것이 밖으로 점이다.
ARGV 1은 1입니다. argv2은 2입니다. ARGV 3은 3입니다.
하나의 큰 변수는 argv 4, ARGC는 NULL 것보다.
>> 그리고는 NULL 포인터입니다.
예.
문자열이기 때문에 그건 문자 스타 포인터입니다.
그래서 동일한 유형이어야합니다.
그래?
>> 대상 : 두 가지 질문입니다.
그래서 하나의 차이점은 무엇입니까 이 하나의 형식이 아닌 다른하는 GetString
사용자 엔진?
그리고이은 그것 안에 저장된 최근 메모리?
과 같이,하는 GetString는 것 [청취] 수?
>> DAN : 그것은 어디에 저장됩니까?
이 저장된 위치를 모르겠어요.
>> 청중 : 그래서, 실제로, 당신은 방법을 알고있는 당신은 그것의 인수 호출 작동합니다
스택에 저장됩니다?
그래서 argc와 argv는 main 함수에 사용되는 인수입니다 그들은 정말 스택에, 또는
당신이 같은 생각을 위 스택의 시작.
다른 부분 무엇 질문?
>> 청중 : [청취] 그래서 무엇입니까?
>> DAN : 네, 그냥 다른 방법 의 사용자로부터 입력을 받고.
이 하나의 조금 더 효율적이고 그것은 스크립트에 대한보다 간편한의 당신 때문에
다만 주에 인수를 전달할 수 있습니다 오히려 기다릴 필요 이상의 기능
당신은 어떤 사용자가없는 경우 사용자를위한.
>> 청중 : 그리고 네, 문자열을 얻을 [청취] 일 것입니다.
그것은 당신이 필요로하는 물건을 저장하는 것입니다.
>> DAN : 그래?
>> 청중 : [들리지?
>> DAN : 예, ARGV 0은 항상 포함 함수 호출의 점 슬래시.
그래?
>> 청중 : [들리지?
>> DAN : 예, 각 인수는 NULL 문자로 종료하기 때문에 그들은
문자열입니다.
>> 청중 : [들리지?
>> DAN : 예, ARGV ARGC는 NULL 포인터입니다.
>> 청중 : [들리지?
>> DAN : 오, 그래.
죄송합니다, 그래.
>> 청중 : 그래서 [들리지?
>> DAN : 당신이 가지고 있다면 그래서 질문 명령 줄 점은, 1, 2 중 점을 슬래시
것 명령 행의 수 인수는 두 수 또는 세 있을까?
>> 청중 : 나는 그것을하지 않는 생각 정말 문제.
내가이 말을하는 경향이, 오, 당신은 통과하지 못한 명령 줄 인수 할 때,
분명히, 당신은 함수를 호출.
그래서 음성으로 제외하는 경향이 명령 줄에서 함수
그것이 비록 인수 ARGV에 포함되어 있습니다.
>> DAN :하지만 시험에 있었다면 -
그래 - 또한 당신은 뭔가를 말한다면 같은 ARGC, 3과 동일
당신은 안전 서입니다.
그래?
>> 청중 : [들리지?
>> DAN : 나는 생각한다면이 대신 호출 argc와 문자열 argv에 괄호
하지만이 같은 유형을 유지하고 방금 전화 그와 같은 다른 무언가
b는 여전히 작동합니다?
그리고 그것은 여전히 작동합니다, 당신은 것 -
대신 ARGC를 사용 - 당신은 A와 B를 사용하십시오.
그래?
>> 청중 : [들리지?
>> DAN : 그래서 질문은, getString에있다 힙에서 메모리를 저장하는 것
하는 GetString이 문자 때문에 *.
그것은 힙에 메모리를 저장 그것 때문에 실제 내에서 현재의 malloc를 호출
하는 GetString의 구현입니다.
OK,에 이동.
>> 보안.
그래서 진정으로 안전한 것으로, 당신은 더 의존 하나는 당신이 할 수있는 하나의 액세스 없음
귀하의 정보를, 어떤 이유입니다 모든 사람이 자신의 컴퓨터를 구축,
자신의 운영 체제, 그들의 분명히 처음부터 프로그램,
다른 컴퓨터에 연결하지 마십시오 인터넷을 통해.
그래서 컴퓨터가 안전하지.
그들은 정말이다.
우리는 다른 사람을 신뢰해야합니다.
>> 그리고 보안의 아이디어는 걸입니다 양을 제한하려고
당신이 필요로하는 것을 믿습니다.
그리고 당신은 그렇게 할 수단 중 하나 암호화하는 것입니다.
암호화는 본질적이며 우리는 비밀이있다.
>> 때때로 우리는 우리의 비밀을 통과해야 따라서 인터넷 말하자면, 통하거나
다른 것들.
그리고 우리는 사람을 원하지 않는 이 비밀을 알고 있습니다.
그래서 우리는 방법으로 우리의 비밀을 암호화 우리는 아무도 이해할 수있는 희망.
>> 그래서 우리가 사용 -
이 클래스의 과정을 통해 -
시저 암호와 같은 것들 [청취], 모두 매우, 매우되는
일을 암호화 안전하지 않은 방법.
그들은 그들이 무엇을 파악하기 쉽기 하고 당신의 비밀은 무엇입니다.
현실 세계는 훨씬 더 사용 복잡한 암호화 방식.
그리고 우리는 들어갈 수 없습니다 그 이상.
>> 디버깅.
GDB는 최고입니다.
나는 이것을 다시 강조하겠습니다.
GDB마다 모든 시간을 사용하여 당신은 문제가있을 시간.
GDB에 유용한 명령은 당신이 줄을 통과하는 휴식
번호, 함수 이름, 본질적으로 코드에서 중지 할 경우,
및 제어 할 수 있습니다.
>> 인쇄 변수를 받아 출력한다 그 변수는에 무엇이든
당신의 실행에 가리 킵니다.
옆에 실행 이동 한 단계를 따라.
그리고 함수 내에서 단계 단계 당신의 실행에.
>> 다른 것들은 어떻게하는 실행 실제로 코드를 실행합니다.
계속 필요한 모든 조치를 취 다음 브레이크 포인트를 얻을 수 있습니다.
그리고 많은, 많은 사람들이 있습니다.
그들을 봐.
그들은 아주 좋아요.
그래?
>> 청중 : [들리지?
>> DAN : 네, 어떤 디버거이다.
그래서 디버거는 프로그램입니다 당신은 당신의 프로그램을 디버깅 할 수 있습니다.
그것은 버그 발견 프로그램이 아니다 당신은, 비록 그 위대한 것입니다.
>> 그리고 저를 위해 마지막으로 검색합니다.
우리가 이야기 검색 그래서 유형 약이 클래스에서 선형 검색이 있습니다
이는 각 통해보고 그냥입니다 검색 공간, 하나의 요소
한 번에 요소가 될 때까지 당신은 무엇을 찾아 당신이 도달 할 때까지 찾는 나하고
검색 공간의 끝에하는 당신은 당신이 찾을 수 없습니다 말은 점
당신이 찾고 있던 요소입니다.
그리고 이것은, 가장 일정한 시간이 소요 이는 0 1 최악의 선형에
N의 0 시간.
>> 이진 검색, 어떤 필요 지저분한 요소.
당신은 요소의 중앙으로 이동 볼 경우 당신이 찾고있는 요소
요소보다 크거나 작은 당신은 중앙에다는 것을.
그것이 더 큰, 당신은 그런 말 바닥 검색 공간이 당신의
현재 위치, 중간, 당신은 프로세스를 다시 시작합니다.
작을 경우, 당신이 말하는 봐 그 - 그래, 무슨 일이야?
>> 청중 : [들리지?
>> DAN : 예.
모든 종류의 종류로 진행되고있어 그 클래스는 테스트를위한 공정한 게임이다.
>> [웃음]
>> DAN : 그리고 당신은 없었어요 사실 설정 문제에 대한 그것을 할, 그것은 공평
테스트 게임.
>> 청중 : 우리는 방법에 그것을 통해 갈 수 -
>> DAN : 그것은 이상 사라질 것입니다.
>> SPEAKER 2 :위한 실제 코드 [청취] study.cs50.net에 있습니다.
그래서 당신은 연습 문제를 보면 의 병합 정렬 페이지
study.cs50.net 코드가있다 병합 정렬을 구현.
그래서 당신은 구현할 필요가 없습니다 스스로 오늘 밤.
그러나 당신이 아니라 그것을 이해 그냥 암기보다.
>> 청중 : [들리지?
>> 스피커 2 : 병합 정렬 페이지 study.cs50.net, 방법은있다
문제, 당신은을 클릭하면 문제는 맨 마지막에있다
병합 해결책, 정렬 구현.
그러나 당신이 그것을 이해 오히려 그냥 암기보다
또는 아래로 복사.
>> 청중 : 그리고 완벽하게 유효한 시험 문제가 될 것
여기에 같은 것이 목록입니다.
이 목록은 이후 어떨까 하나의 선택 정렬의 단계 또는
삽입 정렬이든.
목록 중 하나는 전체 반복.
당신은 할 필요가 끝날하지 않도록 경우에도 이에 대한 코드는, 당신은 그것을 이해할 필요가
그것은 무슨 방법을 알아 보자 이 배열을 수정합니다.
>> DAN : 그것은 나를 위해 그것을이다.
>> [박수]
>> LUCAS : 안녕 모두.
내 이름은 루카스입니다.
나는 모든 재귀에 대해 이야기하는거야 우리가 배운 종류 및
모든 포인터의 약간.
OK?
모든 그래서 일단, 재귀.
무슨 말을 의미 않습니다 함수는 재귀?
>> 청중 : 자신을 호출합니다.
>> LUCAS : OK, 그래, 그 자체를 호출합니다.
그래서이 그림처럼, 예를 들어.
그것은 내부의 그림처럼 그림 등등.
그래서 예를 들어, 당신은 할 수 있습니다 - 단으로 즉, 이진 검색에 대해 얘기했다.
이진 검색하는 한 가지 방법 재귀 당신이있어 사실이다
번호를 찾기 위해 노력.
그래서 당신은 중앙으로 이동합니다.
그리고 당신은 선택하면이 숫자 왼쪽과 오른쪽에있는.
>> 찾으면 다음 수는 좌측 될, 동일의 정보
다시 검색을하는 등의 일이 있지만, 단지리스트 좌측.
그래서 그것이 소리 방법 같은 재귀입니다.
너희들은 재귀 이유 그래서의 병합 정렬을위한 솔루션을 제공합니다.
>> OK, 그래서 여기에 예입니다.
그래서 내가 선택하려는 가정 해 봅시다 1에서 N까지 모든 숫자.
나는 실감 할 수있는 N의 합 수는 N 플러스 N - 1 일까지이다.
하지만, 내가 N 보면 마이너스 1 플러스 N 마이너스 2에 1을 더한 값, 즉 동일합니다
숫자를 합산 같은 것 최대 N 마이너스 1.
그래서 동일한 금액의 합계를 말할 수있다 - 1 N 플러스 N의 합계와 동일합니다.
그 의미가 있습니까?
>> 그리고 또한 다른 뭔가를해야합니다 것입니다 기본 케이스라는
숫자까지의 합 제로로하면 제로가 될 것입니다.
그래서 최대한 빨리 수를 얻을 제로, 나는 계산 중지합니다.
그 의미가 있습니까?
>> 그래서 여기 방법의 예 나는 그것을 구현할 수 있습니다.
그래서 일부에서이 기능을 가지고 있습니다.
즉, 정수 n을 사용합니다.
n은 경우에 따라서는 여기에 먼저 확인 작거나 0으로 동일합니다.
그래서, 나는 제로 이하의 경우 우리의 기본 케이스입니다, 0을 반환.
그렇지 않으면, 난 그냥 돌아 N 플러스 할 수 있습니다 에서 숫자의 합계
N 하나를 뺀 한.
이해가가?
OK.
>> 그래서 여기가 어떻게 생겼는지입니다.
당신은 2 등호의 합이 2 더하기 1의 합.
1 중 일부는 1 플러스 0 0의 합.
이해가가?
그래서 우리는 당신의 스택을 보면 이 프로그램은,이는 모습입니다.
>> 첫째, 우리는 주요 기능을 가지고 있습니다.
그리고 주요 기능 합계 2했다.
그리고 합계 2 말할 것입니다, 오, 합 (2)는 2 더하기 하나의 합계와 동일합니다.
그래서 스택 (1)의 합계를 추가합니다.
그리고 1의 합이 합계를 호출하는 것입니다 0도 추가 할 예정되는
스택.
그리고 이들 것들의 각 서로의 상단에 반환해야
다른 사람은 계속하기 전에.
>> 그래서 예를 들어, 여기서, 0의 합 첫 번째, 0을 반환하는 것입니다.
그리고 1의 합계를 선택합니다.
그런 다음 1의 합은 예정 (2)의 합에 1을 반환합니다.
그리고 마지막으로, (2)의 합계는 것입니다 주 3을 반환합니다.
그 의미가 있습니까?
>> 이 방법을 이해하는 것이 정말 중요합니다 스택이 작동하고 시도한다
그것이 의미가 있는지.
좋아, 그럼 정렬.
그럼 왜 중요 정렬됩니다 먼저?
왜 우리가 관심을 가져야?
누군가?
나에게 예를 줘?
그래?
>> 청중 : [청취].
>> LUCAS : OK, 그래.
그래서 당신은보다 효율적으로 검색 할 수 있습니다.
그것은 좋은 방법입니다.
따라서, 예를 들어, 우리는 많이 가지고 일, 사실, 우리의 삶에 그
분류되어 있습니다.
예를 들어, 사전.
>> 그것은이 매우 중요 모든 위해 어떤 종류의 단어 우리
쉽게 액세스 할 수 있습니다.
그래서 그가 말했 자나.
당신은보다 효율적으로 검색 할 수 있습니다.
그것을 가지고하는 것입니다 얼마나 열심히 생각 단어로 된 사전
임의의 순서.
당신은 꽤 많이,보고해야합니다, 모든 단어를 찾을 때까지
당신이 찾고있는 것을 단어.
>> 당신은 또한 페이스 북을 사용하는 경우,시 당신이 당신의 친구를 찾고, 당신이있어
페이스 북이 당신을 넣어 볼 것 가까운 친구가 사람의 상단에의
당신은 많은 얘기하지 않는 것이.
당신은 모든 방법의 하단으로 이동하는 경우 친구 목록, 당신은 보게 될
당신은 아마하지 않는 사람들 당신과 친구가다는 것을 기억하십시오.
그리고 그건 페이스 북의 종류 때문에 당신의 친구를 기반으로하는 방법
당신이 그들에게 있습니다 닫습니다.
>> 따라서 데이터를 구성.
또한 포켓몬.
그래서 당신이 볼 수있는 모든 Pokemons들은 번호가.
그리고 쉬운처럼 데이터 액세스 방법.
>> 청중 : 포켓몬 액세스.
>> LUCAS : 네.
>> 청중 : [청취].
>> LUCAS : 그래.
좋아, 그럼 선택의 종류.
선택의 종류를 선택하는 것입니다 목록 각각의 작은 정렬되지 않은 값
각 반복의 시간.
그것은 종류의 당신이 정렬처럼 당신이 시도하고 당신의 머리에
손에 목록을 정렬 할 수 있습니다.
>> 기본적으로, 당신이 모든 당신이 보는 것입니다 가장 작은 수의.
당신은 정렬 된 목록에 넣어.
그리고 당신은을 찾습니다 다음으로 작은 수입니다.
그리고 당신은 일을 계속 그 등등.
>> 그래서 선택의 종류는 기본적으로 당신입니다 작은 모든 시간을 선택
정렬되지 않은 값입니다.
소트의 끝에 넣어 목록의 일부입니다.
그리고 그 일을 계속.
그럼 빨리 볼 수 있도록 무엇을 이처럼 보인다.
그래서 여기에 분류의 및 정렬되지 않은 목록입니다.
>> 그래서 목록의 정렬을 위해, 그것은 처음에는 비어 있습니다.
그리고 내가 선택한거야 2 여기에 작은 수입니다.
그래서 2 번을하고 난 넣어 리스트 앞.
그리고 나는 다음 최소를 찾습니다 3 요소입니다.
그래서 마지막에 넣어 정렬 된 목록의.
그리고 그 일을 계속.
나는 4을 찾아 마지막에 넣어.
5을 찾아 마지막에 넣어.
>> 그리고 그 시간의 방법을 모두 살펴 그 I이며, 마지막에 넣어 말하는거야
기본적으로,이 값을 스와핑.
OK?
그리고 마지막 하나는, 방금 또 하나의 요소가있다.
그래서 그것은 이미 정렬 있어요.
>> 좋아, 그럼 삽입 정렬.
당신은 또한해야 할 것입니다 삽입 정렬 정렬을 갖는의 것
정렬되지 않은 목록입니다.
유일한 방법은 때마다 그 당신은 분류에 요소를 추가하는
목록, 당신은 단지 요소를 선택하는 정렬되지 않은 목록의 앞에 있습니다.
그리고 당신은 찾을 거냐 이 분류에 있어야 위치
목록의 일부입니다.
>> 의이 정말 무엇인지 살펴 보자 이 더 의미가 있습니다.
그래서 처음에, 예를 들어, 내가 노력하고있어 에서 3 번 삽입
목록의 일부를 분류.
그래서 목록은 아무것도하지 않습니다.
그래서 난 그냥 숫자 3을 넣을 수 있습니다.
>> 지금, 나는에 숫자 5를 추가 할 목록의 정렬 된 부분.
그래서 숫자 5를 봐주세요.
나는 3보다 큰 걸 알 수 있습니다.
그래서 나는 3이 여야한다는 것을 알고있다.
그래서 3, 5를 넣어.
>> 그럼 난 숫자 2를 삽입 할.
나는 2 번이 실제로 있음을 알 다음 마지막 5 모두.
그래서 사실은 넣어 가지고있는 모든 목록의 시작 부분에있는 방법입니다.
그래서, 종류, 모두를 이동해야 정렬 된 목록의 요소 그래서 내가 할 수있는
숫자 2를위한 공간을 만들기.
>> 그럼 난 숫자 6을 참조하십시오.
나는 5 이후에해야한다는 참조하십시오.
그래서 나는 거기에 넣어.
그리고 마지막으로, 나는 4 번 봐.
그리고 나는 그것이해야 통지 (3, 5) 사이.
그리고 나는 거기에 넣어 이동 다른 모든 요소.
이해가가?
>> 거품 정렬.
그래서 버블 정렬은 말이있어 기본적으로 할 것 - 우리는 거품을 호출
당신이 목록을 통해 이동 정렬하기 때문에 - 난 그냥 보여 주면 실제로는 더 나은
당신이 좋아 -
당신은 비교거야 인접 번호.
그리고 당신은 바꿀거야 자신의 위치 그들이하지 않은 경우
올바른 순서.
>> 그러니까 기본적으로, 어떤 일이 예정 일어날 여기서, 예를 들면,
당신은 8, 6이있다.
당신이 알고있는 정렬 순서는 것이다 실제로 권리, 6, 5 수?
그래서 당신은 주문을 교환하는 것입니다.
그럼 여기에서 8 4를 참조하십시오.
그리고 같은 일을 할.
다시 교환합니다.
그리고 마지막으로,도 2 및 8.
또한 그들을 교환.
>> 그것은 정렬 때문에 후 거품라고 이러한 반복의 각, 사실,
목록의 최대 개수는 모두 붙어 리스트의 마지막 방법.
그 의미가 있습니까?
그것을 계속 교환하므로 오른쪽으로 이동.
>> 좋아, 그럼이 두 번째 반복입니다.
이 같은 일이 될 것입니다.
나는 하나의 스왑을하고 있습니다 다음 마지막.
더 스왑이 없습니다 I 것을 그리고 목록이 정렬됩니다.
그래서 거품 정렬, 우리는 기본적으로 유지 목록을 가서 교환
가지 내가하지 않았어 것을 알 때까지 그 반복을 수행하는 모든 스왑하는
목록이 이미 정렬되어 있다는 것을 의미한다.
이해가가?
>> 의 조금을 얘기하자 에 대한 실행 시간.
그래서 너희들은 기억 큰 O, 오메가, 세타?
그래?
OK, 큰 O는 우선, 무엇입니까?
>> 청중 : [청취].
>> LUCAS : 네, 그것은 최악의 경우라고 그냥 것을 의미 런타임
당신은 프로그램을 기대 얼마나 실행하기 위해 취할 수 있습니다.
같은 측면에서 -
이 경우 - 없음.
의 요소 수 최악의 경우에 기재.
같은, 최악의 경우.
>> 그래서 거품 정렬, 예를 들어, 우리는 n 개의 정사각형의 큰 O가있다.
우리가 왜해야합니까?
왜 거품 정렬 빅 오 N 광장은?
>> 청중 : [청취].
>> LUCAS : 그래, 최악의 경우가 될 것입니다 나는 N 반복을해야 할 것이다있다.
그래서 반복 각각 예정 끝으로 큰 요소를 가지고
목록.
따라서 최악의 경우 내가 가지고있다 그 일을 n 번 수행합니다.
그리고 그 시간마다, 나는이에 내가 비교해야하기 때문에 N 스왑을
각각의 두 요소.
이 N 제곱 왜 그래서의 는 n 번 N 때문.
>> 그런 다음, 선택의 종류는 N 정사각형 각 반복에 대해, 내가 가지고 있기 때문에
모든 단일 요소를 살펴 목록에서.
그리고 가장 작은 발견, 이는 내가 가지고있는 것을 의미하는
n 개의 요소를 찾습니다.
그리고 나는 그 N 번 수행해야하기 때문에 나는 모든 N 요소를 선택해야합니다.
>> 삽입 정렬은 N 정사각형 최악의 시나리오가되므로
하나, 나는 삽입해야 할 N 번호, 오른쪽?
그래서 난 이미거야 알고 N 반복을해야합니다.
하지만이 있다면 그 숫자, 각 모든 숫자에 보는
정렬 된 목록과 모든 방법을 넣어 앞, 즉 N 스퀘어됩니다
그것은 시간을 다시 N n 개의되기 때문에.
이해가가?
무엇 오메가에 대한?
>> 청중 : [청취].
>> LUCAS : 그것은 최상의 시나리오입니다.
그래서 위해 많은 시간에, 마치 정렬 최상의 시나리오이다
목록이 이미 정렬 할 때.
그래서 당신이 정말로 필요가 없습니다 아무것도 할 수.
버블 정렬 가장가 N의 시나리오.
너희들은 이유를 알고 계십니까?
>> 청중 : [청취].
>> LUCAS : 그래, 당신은 트랙을 유지하는 경우 데이터 배급은 스왑을했다 여부를
아니, 당신은에 세트 같은 것이있는 경우 경우 반복, 거기에 해당하는 경우
목록이 이미 정렬되어, 기본적으로, 무슨 일이 일어날 것은 내가 갈거야입니다
각 2에게 교체하려고 인접하는 요소.
내가 볼거야 그 더 스왑이 없습니다.
그리고 난 그냥 바로 돌아갑니다.
>> 그래서에 그냥 가지고 있음을 의미합니다 목록을 한 번에 이동합니다.
내가 보이기 때문에 그래서 그것은 N의 N 요소에서.
왜 선택 종류의 N 제곱?
>> 그래, 목록이 정렬되는 경우에도, 용 선택 정렬의 모든 반복, I
최소의 요소를 선택해야합니다.
그래서 내가 보이려고한다는 것을 의미 정렬되지 않은 모든 요소에
최소 나열하고 찾아 각 반복하십시오.
그 의미가 있습니까?
>> 그리고 삽입 칼에 있기 때문에 n은 나는 삽입하기 위해 노력하고있어 경우
숫자와 숫자의 모든 때 을 삽입하려고, 내가 볼 그들이
올바른 위치에 있습니다.
나는 다른 모든 확인 갈 필요가 없습니다 정렬되지 않은 목록에있는 번호.
이 N 될 것입니다 그런 이유입니다.
이해가가?
세타는 무엇인가?
>> 청중 : [청취].
>> LUCAS : 죄송합니다, 무엇?
다시 말해봐.
>> 청중 : [청취].
>> LUCAS : 그렇지.
그래서 당신은 볼 수 있습니다 만 선택 병합에 저장 종류 쎄타있다.
당신은 단지 세타가 있기 때문에 그건 큰 O와 오메가는 모두 동일합니다.
OK.
그리고 마지막으로, 일종의 로그 N에 병합합니다.
>> 그리고, 댄 말했듯이, 정렬 병합 종류의 그 같은 방식처럼
2 진 검색을 수행.
그래서 당신은 목록을 얻을.
그리고 당신은 반으로 잘라 것입니다.
그리고 당신이 그들을 잘라 작은 반쪽.
그리고 당신이 그들을 병합합니다.
너희들은 기억, 바로 그?
OK, 그가 말했듯이.
>> OK, 포인터.
그래서 포인터는 무엇인가?
>> 청중 : [청취].
>> LUCAS : 주소.
OK.
나는 다윗이 한 무리의 표시되는지 알 빙키와 가리키는 것을 동영상
서로.
하지만 포인터 생각하고 싶다 같은 단지 주소.
그래서 것입니다 변수의 주소를 저장합니다.
>> 그래서 그냥이 특수 변수의 즉, 4 바이트 길이입니다.
기억, 아무것도 그 포인터는 우리의 32 비트 길이 항상 4 바이트
기계의 경우는 이렇게 장비.
그리고 그것은 단지 위치가 그것의 변수 내부.
>> 좋아, 그럼이 메모리는 기본적으로있다.
그래서 메모리의 각 블록은 실제로있다 의 주소 라벨,
slotty 메모리.
그래서 내가 할 수 있다는 것을 의미 에 대한 포인터가 가리키는
이러한 주소 중.
그래서 우리는 포인터를 사용합니다 이유는 나는 위치를 기억해야하는 경우
특정 변수가 메모리된다.
>> 그리고 너희들은 기억이 그 중 하나 나는 기능이있는 경우 경우가 있었다
사실은 당신을 원하는 경우 실수에 대한 스왑, 사실은
포인터를 보낼 수있다.
아니 변수입니다.
너희들은 그 기억하십니까?
차이 -
이름은 무엇입니까?
값으로 호출 및 호출 참고로, 오른쪽?
>> 네, 그러죠.
그래서 값으로 호출합니다.
당신은 단지에 변수를 보낼 때 당신이 값을 보내는 기능을한다.
그래서 당신은 실제로 보내는 변수의 복사본입니다.
그리고 당신의 프로그램이 덜 신경 수 없습니다 에 대한 경우 같은 변수 실제로
복사본을 만듭니다.
>> 그리고 참고로 호출하는 것을 의미한다 사실의 사본을 보낼 게요
그 변수의 포인터.
그래서 내가 보낼거야 것을 의미한다 그 변수의 위치입니다.
그래서 난의 위치를 감지 변수, 그 함수를 호출 할 때
포인터, 사실 수 있어요 메인에 있던 데이터를 변경합니다.
이해가가?
>> 하지만, 포인터는 복사본입니다 포인터는 여전히 실제 주소를 가지고
I 변경할 변수입니다.
이해가가?
>> 그래서 포인터를 생성.
포인터가 항상이 기억 그것이 가리키는 것 유형
에 다음 스타.
그리고 당신의 이름을 넣어.
그래서 기억 당신이있을 때마다 그 어떤 스타, 그것은에 대한 포인터처럼
그 어떤 변수 당신이 있었다는 것을 입력합니다.
>> 그래서 여기 성, 예를 들면, 그것의 정보 포인터와 정수.
그리고 문자 스타 포인터 문자 스타 등.
그래?
>> 우리는 가지고있는 경우 : 관객 별 X n에 대한 포인터.
나는 그것이 X에 대한 포인터를 만들어 알고있다.
또한 정수 x를 선언합니까?
>> LUCAS : OK, 그래서 당신은 N 스타 X를 말할 때, 당신은에 대한 포인터를 생성하지 않을
x 변수.
당신은 포인터라는 이름의 X를 만들고 있습니다.
>> 청중 : [청취].
>> LUCAS : 나는 N 스타 X를 말할 때, 난 이봐, 메모리, I가에 갈거야, 말
이 세 개의 상자 중 하나를 얻을.
그리고 내가 말할거야 그이 인, X가 될 것입니다
포인터가 될 것.
그리고 포인터에 대한 흥미로운 우리는 그들이 가지고 말할 것입니다
32 비트 시스템에 대해 4 바이트.
그리고 그 이유가 있기 때문 4 바이트는 32 비트입니다.
>> 그리고 64 비트 실제로 기계 포인터의 주소가
64 비트 길이됩니다.
그래서 그냥 의미의 크기 기계의 주소가 다릅니다.
>> 그래서 참조하고 역 참조.
두 사업자가 그 너희들은 기억해야한다.
첫 번째는 앰퍼샌드됩니다.
두 번째는 별이다.
그 별이 혼동하지 마세요 스타 때문에, 즉 기억
이 경우, 당신은 N 스타가있다.
>> 그것은 함께 모든 일처럼.
없음 해당 공간 스타가 없습니다.
따라서이 유형의 것을 의미한다.
기억, 그 때 당신이 변수 별, 당신이있어
유형에 대해 얘기.
>> 당신은 다음 스타와 한 때 변수의 이름은 그 의미
당신은 포인터를 역 참조하고있는 당신이보고있는 것을 의미한다
포인터는 어드레스를 찾는 그건 해당 주소로 이동을 가리키는
때마다보고 당신은 거기에있다.
그래서 난 내 학생들에게 그 때 당신이 스타, 당신은 그것이라고 생각한다
의 내용의 약어.
>> 그래서 당신은 포인터를 가지고 있고 경우 스타 포인터를 수행, 그것은이다
포인터의 내용.
그래서 당신은 그것을 가리키는 뭐든간에 이동 및 일정 내용을 확인합니다.
그리고 앰퍼샌드는 동일합니다 의 주소와 같은 것.
>> 나는 변수를 가지고있는 경우 - 같은하자 내가 INT의 3에 해당 한 말 -
그의 주소를 찾으려면 변수 메모리, 난 그냥 할 수있는
앰퍼샌드.
그래서 주소입니다.
이해가가?
>> 그래서 여기에 예입니다.
이것은 INT B와 C INT가 없습니다.
3 수단에 해당 INT 그래서 나는 메모리에 갈거야.
그리고 슬롯을 찾을거야 여기에 숫자 3을 넣어.
>> 그리고 INT B는 4와 동일합니다.
나는 같은 일을 할거야.
메모리에 가서 번호를 넣어 상자 중 하나에있는 4.
그리고 INT 5 같습니다.
또 다른 상자를 찾아 숫자 5를 넣어.
>> 따라서이 선은 무엇을하고 있습니까? N 스타 PA는 앰퍼샌드 같습니다.
그래서 우선, N 스타 파.
그것은 무엇을하고 있습니까?
>> 청중 : [청취].
>> LUCAS : 그래, N 스타 PA, 첫 번째, PA라는 포인터를 선언합니다.
그리고, 그것의 값을 할당하는 것 의 주소에 그 포인터.
그래서 앰퍼샌드.
그럼, 스타 PB를 할 경우, 스타 PB는 무엇인가?
>> 아, 죄송합니다.
또한이 누락되었습니다. N 스타 PB.
나는 별 PC를 의미한다.
정말 죄송 해요.
그것은 같은 것입니다.
하지만 지금은 포인터를 생성 AR 잘 해요 B와 다음 C에 대한 포인터.
그래?
>> 청중 : [들리지?
>> LUCAS : 예.
그래서 메모리에 가서 당신이로 이동하는 경우 PA에 대한 지정자입니다 상자,
실제로거야 의 주소를 참조하십시오.
OK?
그래?
>> 청중 : [들리지?
>> LUCAS : 네, 포인터가 주소입니다.
잊지 마십시오.
그것은 가장 중요한처럼 포인터에 대한 부분입니다.
이 저장 및 주소 있어요 일부 변수.
다른 건?
다른 질문?
OK.
>> 그래서 배열, 포인터 등이 포함된다.
기억이 나는 배열 3 int로 할 때, 기본적으로, 내가 무엇을하고 있어요 것은 내가 종류 해요입니다
의, 포인터를 선언.
그래서 배열의 종류에 대한 포인터처럼 메모리의 특정 장소에있는 I
정수 세 슬롯을 할당.
그 의미가 있습니까?
>> 그래서 난 어떤 배열 3, int는 않는 경우 하고, 기본적으로 세 가지를 만드는 것입니다
메모리 슬롯.
그래서 그냥 메모리에 세 개의 슬롯을 찾을 수 있습니다.
내가 할 경우, 별 배열, 너무 기본적 배열 법적 수단,
내가 포인터를 삭제 의미 가야 이 가리키고있어 그 장소에,
난 숫자 1을 넣어.
>> 그리고, 나는 스타 배열에 1을 더한 할 경우, 그 배열을하고 같은 일이
그냥 이동 수단 브라켓 하나, 그것이 가리키는 것 장소.
다음에 1을 더한 만든다 나 하나의 위치를 이동.
그래서, 실제로,이 위치로 이동 그리고 두 번째를 넣어.
>> 그리고, 마지막으로, 언제 할 어레이 (2) 또한, 내가있는 곳으로 이동
에서 배열 포인팅.
그리고 나서 메모리 블록으로 이동합니다.
그리고 여기서 3 번을 넣어.
그래?
>> 청중 : 그래서 별 배열은 단순히 첫 번째 점을 말.
그리고 당신은, 1를 추가 할 수 있습니다 때문 만 우리는 정말이야
그 첫 번째 주소를 참조.
>> LUCAS : 네.
왜 우리는, 예를 들어, 배열을 말합니까 0, 어레이 (1) 및 어레이 (2)?
0을하지 않는 이유는, 말하는거야 1, 2, 대신에 1, 2, 3의 3?
그 이유 중 하나는, 한, 컴퓨터 프로그래머가 시작하는 것을 선호
0부터 계산.
당신이 배열의 0을 할 때 때문에 두 가지이며, 그것은 배열을하고 같은 일이
플러스 0, 이는 내가 이동 수단 그 위치, 그리고 난 몰라
모든 메모리 블록을 건너 뜁니다.
그래서 나는 모든 메모리 블록을 이동하지 않습니다.
그래?
>> 청중 : [들리지?
>> LUCAS : 그래서 그녀는 무엇인지 묻는 데요 하 차이
이 또는 malloc에 일을.
차이점 중 하나는 int 배열 (3)을 만드는 것입니다
스택의 배열입니다.
그리고 malloc을 할 때, 힙에 생성합니다.
그 의미가 있습니까?
>> 어떻게 malloc에 실제로 작동합니까?
그럼 왜 우리는 심지어의 malloc를 사용해야합니까?
중 모든 인물의 컴파일러의 종류 당신이 선언 된 변수.
그리고 그는 모두를위한 공간을 만들어 스택을의.
따라서 모든 변수는거야 어딘가에 스택에 저장할 수 있습니다.
그래서 여기에 환경 변수입니다.
>> 그러니까 기본적으로, 그 변수를위한 공간 메모리에 할당
시간을 컴파일합니다.
그래서 당신의 컴퓨터에있는 것을 의미한다 그 모든 변수를 알고
사전.
그것은 어떤 가치를 알 필요가 없습니다 당신이 그들에 넣어 것입니다.
그러나 알고 있어야하는 방법 많은 메모리가 필요합니다.
>> 하지만 지금의 그런 말을하자, 예를 들어, 당신은 배열을 만들거나 복용하고
당신이 복용하고 문자열 사용자로부터.
당신은 몰라 얼마나 오래 문자열 예를 들어, 될 것입니다.
그래서 당신은 몰라 정확히 얼마나 많은 메모리 블록은 당신이 할당, 오른쪽?
>> 그래서 진짜로 이해가되지 않습니다 당신은 100 문자를 넣어 말할 수 있습니다.
그리고 사용자가 150을 어떻게 쓰면?
당신은 나사 될 것입니다.
>> 그러니까 기본적으로, 당신은 어떻게 확신 할 수 없다 당신이 할당 할 필요가 많은 메모리를
프로그램을 컴파일 할 때.
당신은 실행 시간에 알아.
당신이 힙을 가지고 그런 이유입니다.
따라서 힙 메모리를해야 할 것입니다 당신은 동안 할당하고 있는지
프로그램 실행 기간.
>> 그러니까 기본적으로, 당신의 malloc을, 어떤 당신은에 할당 된 메모리를하고있는
런타임, 이는 당신이다는 것을 의미한다 그 순간에 바로 결정하는 당신
해당 메모리가 있어야합니다.
당신이 그것을 할당 할 때 그래서입니다.
그 의미가 있습니까?
>> 따라서 스택 변수가 기억 컴파일시에 생성되는.
그리고 힙 변수가 당신이가는로 생성되는
malloc에, 예를 들면.
>> 청중 : [들리지?
>> LUCAS : 그래서하는 GetString입니다 의 malloc를 호출하는 것.
내가 malloc에 대해 얘기하자, 그리고 내가하는 GetString을 설명 할 것이다.
그래서 malloc에이 같은 것입니다 메모리 할당 등.
그래서 할당 할 것 힙에 메모리.
그리고 그것은에 대한 포인터를 반환 것 그 메모리에 할당 된 곳.
>> 그래서 당신이 할 때 -
여기에 예를 들어 -
N 스타 포인터.
그리고 포인터의 malloc에 해당 인치 10 배의 크기입니다.
나는 포인터를 만드는거야.
그리고 나서 해당 포인터를 할당 해요 포인터의 값이 malloc에
저를주고있다.
>> 당신이 할당 할 수있는 그래서 malloc에 부탁 해요 10 정수를위한 공간입니다.
즉, 무슨 말을합니다.
그리고 malloc에 나에게 다시 제공 그 장소에 대한 포인터입니다.
이해가가?
OK.
나는 그리고하는 GetString는 기본적으로하고있다 당신이 할당 할 수 있도록의 malloc을 호출
런타임에 메모리.
>> 항상 null를 확인하기 위해 기억 때 malloc ()은 널 포인터를 반환하는 것입니다 때문에
그것은 메모리를 할당 할 수없는 경우.
의 당신은 말도 안되는 부탁한다고 가정 해 봅시다 메모리의 양입니다.
컴퓨터가 될 수 없습니다 그 정도를 할당 할 수.
>> 그래서 malloc에 그냥 것입니다 null을 반환합니다.
그래서 항상 확인하는 것을 잊지 경우 당신의 malloc에서 얻은 포인터는
NULL 여부는 경우에, 당신은 수도 있기 때문에 포인터를 역 참조 할
면 결함의 원인.
그리고 마지막으로, 잊지 마세요 당신의 메모리.
>> MALLOC 힙에 메모리를 만드는 것입니다.
그리고 당신은 메모리를 해제해야 프로그램이 종료되기 전에.
OK, 그것은 나를 위해 전부입니다.
죄송합니다, 롭.
감사합니다.
>> [박수]
>> LUCAS : 어떤 마지막 질문 롭 오기 전에?에게
아니?
그래?
>> 청중 : 나는 보지 않았다 온라인이 하나.
당신은 아직 업로드 한?
>> LUCAS : 나는 데이브 생각 곧 업로드.
>> DAVE : 그것은 게시 할 수 있습니다.
>> LUCAS : 그것은 온라인으로 할 수 있습니다.
>> 청중 : 그것은이야.
>> LUCAS : 그것은이야?
OK.
그래?
>> 청중 : [들리지?
>> LUCAS : 예, 당신은 해제해야 모든 힙에 배치되는 메모리.
>> 청중 : [들리지?
>> LUCAS : 예.
당신은 문화의 malloc이있는 모든 시간, 당신은 자유로운 문화가 있어야합니다
당신은 그 변수 사용을 중단 한 후.
그래서 malloc에 무료입니다 언제나 함께.
자신의 가장 친한 친구.
그래.
롭?
>> ROB : 빠르게 이동합니다.
또한 비디오가 올려집니다.
나는에 마이크가있다.
>> 좋아, 그럼 일주일에 다섯 물건.
우리가 먼저 스택입니다.
그래서 하나의 스택이 있다는 것을 기억 활성 함수 호출 당 프레임.
우리는 두 번째에있는 것을 볼 수 있습니다.
또한 실제로 어떤 일이 일어나는지 기억 각 스택 프레임에가 될 수 있습니다
우리 함수의 로컬 변수 에 전달되는 인수 우리
기능, 부부와 함께 당신은 정말하지 않는 다른 것들
에 대해 걱정할 필요.
>> 그래서 여기 어디 예제 프로그램입니다, 통지, 주 반환을 printfing된다
foo는 4의 값입니다.
foo는 그냥 돌아 오려고하는 줄의 값이 4 쉼표 6.
바는 일부 지역을 설정하는 것입니다 변수 (n) 4 회 6에 해당.
그리고 N 돌아갑니다.
>> 그럼 전역 스택을 살펴 보자 이 프로그램의 실제 반복.
그래서 우리의 스택의 바닥이있다.
스택이 자라는 것을 기억하십시오.
그래서 우리의 스택의 맨 아래에, 우리 주를위한 스택 프레임이 있습니다.
프로그램이 시작, 주 항상에있을 것입니다
우리의 스택의 바닥.
>> 그리고 내부에 무엇을 우리의 메인 프레임을 스택?
그래서 로컬가 없더라도 메인에 변수처럼 내가 전에 말했듯이
우리는 argc와 RGV 공간을 차지가 주요 스택 프레임의 내부.
그래서 메인은 이제 예정 foo 함수를 호출합니다.
그리고 그 foo는이 예정 의미 자신의 스택 프레임을 얻을.
>> 그래서 지금 우리가 내부에있어 함수 foo.
그리고 무엇에 갈 필요가 푸즈 스택 프레임?
음, foo는이 인수 N이 있습니다.
그이기 때문에 n은 4와 동일한 것을 주요 푸즈 인수로 전달합니다.
>> 그래서 지금 foo는 바를 호출하는 것입니다.
무엇 바 안에해야 할 것입니다 그 '스택 프레임?
그것은 여섯 동일한 4 y와 같은 X가 있습니다.
즉, 우리가해야 할 것입니다 그 모두가 아니다 스택 프레임 때문에 바
또한 지역 변수 N이 있습니다.
그리고 N 우리는 24과 동일하게 설정하는 것입니다.
>> 그래서 지금 바 N 반환 할 것입니다.
그래서 막대는 24를 반환 스택 프레임 foo는.
바 이제 반환되고 있기 때문에, 그 우리는 스택 프레임을 보여주고있어 의미
에 대한 스택 오프 바.
그래서 모든 메모리는 바 있었다 사용은 스택에서 지금이다.
>> 이제 foo는 또한 예정 주 24을 반환합니다.
그래서 지금 foo는이 반환하는 메모리 그 foo는 그 '에 사용 된
스택 프레임도 사라집니다.
그리고 지금, 주요의 printf를 호출하는 것입니다.
그래서 printf와는 또 다른 기능입니다.
우리의 printf를 호출하면 될 것 printf의 또 다른 스택 프레임
함수 호출.
>> 우리는 printf의를 전달하는?
즉 갈 일이지 해당 스택 프레임.
적어도, 우리가 통과하고 그 퍼센트가 나는 N 백 슬래시
인수 24.
그것은이 스택 프레임 것 이상으로 할 수도 있습니다 printf의 일부를 사용하는 데 발생하는 경우
지역 변수.
우리는 모른다.
>> 모든 게의 printf의에 간다 스택 프레임.
그것은 printf의를 실행하는 것입니다.
다음의 printf 끝났어.
그것은 반환합니다.
마지막으로, 주요 수행됩니다.
주요 돌아갑니다.
그리고 우리의 프로그램을 수행합니다.
그래?
>> 청중 : 당신은보고 있습니까 [들림]
인수 [청취]
매개 변수?
>> ROB : 그래서 미묘한 차이가있다 인수와 매개 변수 사이.
정말, 일반적인 이야기에서, 사람들은 경향 그냥 모든 시간을 섞어.
하지만 파라미터 포멀 아르 물건의 이름을 지정합니다.
>> 그래서 argc와 argv에가 있습니다 주에 대한 매개 변수.
인수는 무엇을 실제로 이러한 매개 변수로 전달합니다.
그래서 전 4, 4의 foo는 호출 할 때 내가 안으로 통과하고있어 인수입니다
그리고 내부 파라미터 n, foo는, 값 4를 취한다
04 일 인수했다.
>> 청중 : [들리지?
>> ROB : N 바있는 지역 변수입니다.
N은 여전히 foo는 로컬이지만, 그것은 foo를 가리키는 매개 변수입니다.
그것은 지역 변수 아니다.
그래?
>> 청중 : [들리지?
>> ROB : foo는 그냥 줄을 호출하고 어떤 줄을 돌려 보내기.
>> 청중 : [들리지?
>> ROB : 그래, 그냥 다 볼 수 스택 프레임.
그래?
>> 청중 : 왜 foo는 호출 된 printf와 전?
>> ROB : 왜 foo는 printf에 전에 호출 된?
그래서, 대신, 뭔가를 할 수 있었다 INT와 같은 X는 4 foo는 동일
다음 X를 인쇄.
하지만 그 대신, 그 기능을 결합 printf의 인수로 호출합니다.
>> 그러나 알 우리가 실제로 할 수 없습니다 우리 때까지의 printf의 호출을 실행
4 foo는 무엇인지 알아 내려고.
그래서 우리는 이것을 평가하는 것입니다.
그리고 한 번 그 일을 끝낼가는거야 다시 와서이 평가한다.
그래?
>> 청중 : 두 줄 이후 들림]
값, 왜 우리는 [들리지가 없습니다?
>> ROB : 그들은 완전히 INT해야한다.
즉 이상 적발되지 않았다 여러 번.
그래서 INT 바 INT해야 이들 모두 이후 foo는
정수를 반환합니다.
보이드는 그들이하지 않을거야 경우에만입니다 실제 값을 반환합니다.
그래?
>> 청중 : 당신이 위의 라인이 있다면 반환, [들리지?
>> ROB : 반환 위의 라인?
>> 청중 : 네.
같은 당신의 printf와 [들리지 않은 경우, 이 두 번 인쇄 할 것인가?
>> ROB : 그래서 foo는 내부에?
우리는 여기에서 printf가 있다면?
>> 청중 : 네.
>> 우리는 printf의 권리를 가지고 그래서 경우 : ROB 여기서, 한 번 인쇄 할 것이다.
우리는 한 번 못 foo는 호출되기 때문에 여기에, 우리는 printf와 충돌합니다.
그럼 우리가 줄을 호출합니다.
그리고 foo는 반환됩니다.
그리고 바로 그거야.
우리는 지금까지 발생 한번의 printf.
그래?
>> 청중 : [청취]
우리가 처음이기 때문에 printf의 foo는 호출 의 printf를 호출하고 우리가 통과하고
인수.
>> ROB : 그래서 이론적으로하지 않습니다 printf의 foo는 호출?
그래서 더.
C가에가는 것을 그냥 순서 우리가 먼저입니다 이러한 것들을 실행
모든 인수, 함수를 호출 기능에있다
완전하게 평가 될 수있다.
그래서이 완전하게 평가한다?
예, 그냥 문자열입니다.
그냥 값이다.
>> 그럼 우리가 완전히이 이 평가합니다.
이 모든 지금, 완료되면 인수가 평가됩니다.
그리고 지금 우리는 할 수 있습니다 의 printf 호출합니다.
그래?
>> 청중 : 질문 하나.
당신은 무효 기능이있는 경우, 반드시 당신은 반환 세미콜론이?
>> ROB : 당신은하지 반환 세미콜론 당신은 무효 기능이있는 경우.
OK.
그래서 지금 일부 힙 물건.
그래서 힙은 우리가 처리 할 것입니다 방법입니다 동적 메모리 관리.
그리고이 직접 대조 우리는 자동으로 호출하는하는 스택
메모리 관리.
>> 그래서 스택에, 당신은 정말 결코 어떻게 지역 변수를 다루는
밀고 모두에서 팝되고있다 이 스택 프레임과 모든 물건.
당신은 그것에 대해 걱정할 필요가 없습니다.
그것은 자동입니다.
그래서 힙은 수동입니다.
그리고 [들림]
이러한 기능에서 온다 malloc에 무료.
>> 그래서 여기에 또 다른 프로그램입니다.
우리가하고있는 모든 mallocing입니다 정수.
우리는 스타 X에 저장하고 있습니다.
물론, 우리는 확인해야합니다 X가 null의 경우 볼 수 있습니다.
그 다음은 무엇을 설정하는거야 X는 50를 가리키고 있습니다.
, 가리키는 것을 X 인쇄하기 인쇄 X, 다음 무료 X.
>> 어떻게이 실제로 보는 것입니다 우리는 우리의 스택과 힙 보면?에게
그래서 우리는 다시 시작합니다.
이전과 같이 우리의 스택의 바닥.
그대가 바로 힙 기억 스택을 반대?
그래서 우리는해야 할 것입니다 거기에 우리의 힙 업의 상단.
>> 그래서 우리의 스택의 맨 아래, 우리는이 주 우리의 스택 프레임.
그것은 ARGC, ARGV의 공간이 있고, 우리 지금, 지역 변수 x를 가지고있는
INT 스타입니다.
그래서 우리는 반복하는거야 이 프로그램을 통해.
우리가 먼저입니다 malloc에 대한 호출.
>> 그래서 우리는 malloc에 대한 호출을하고 있어요.
MALLOC는 기능입니다.
그것은 스택 프레임을 얻을 것입니다.
우리의 malloc에게 무엇을 전달하는?
즉, 내부에 갈거야 스택 프레임의.
우리는 4 인, N의 크기를 전달하고 있습니다.
그래서는 malloc에 전달됩니다.
>> 의 malloc은 무엇입니까?
그것은 우리에게 힙에 약간의 공간을 잡고.
그래서 우리는 힙에 갈 것입니다.
그리고 우리는 잡아거야 힙에서 4 바이트.
그럼 그냥 포기하자 임의의 주소.
0x123 그냥 그 척 즉 힙에 해결합니다.
>> 그래서 그 안에 실제로 주소 Ox123의 메모리 영역?
쓰레기.
그래서 우리는 아무것도 저장하지 않았습니다.
그래서 우리가 아는 한, 무엇이든 될 수 있습니다.
당신은 제로의 가정해서는 안된다.
그것은 가장 가능성이 제로 아니다.
>> 그래서 지금의 malloc 돌아갑니다.
그리고 우리는 때 malloc에 반환 무엇을해야합니까?
우리는 반환 무엇을 설정합니다.
우리는 동일한 X를 설정할 것을 그것은 반환합니다.
따라서 그것은 무엇을 반환하는?
그 때문에이 0x123을 돌아오고 메모리 블록의 주소를 그것이
다만 힙에 할당.
>> 그래서 0x123 X를 반환 지금 설정 될 것입니다 0x123에 해당하는 그림으로,
X 실제에게있는 것으로 우리는 자주 그립니다 그 블록을 가리키는 화살표.
그러나 X는 단지 그 주소를 저장한다.
그래서 지금 우리는 X가 null인지 확인해야합니다.
null이 아니다.
우리는 malloc에 성공 척.
>> 그래서 지금 스타 X 50와 같습니다.
그래서 별은 의미 기억 해당 주소로 이동합니다.
그래서 0x123 우리는거야 해당 주소로 이동합니다.
그래서이 우리를 제공합니다.
우리는 그 주소에서 뭐하는거야?
우리는 50를 저장하는 중입니다.
>> 그래서이 선 후, 그 무엇 가지가 같이 갈 수 있습니다.
그래서 지금은 더 이상 없다 이 쓰레기입니다.
이제 우리는 50 점에서 것을 알고 특정 주소 때문에
우리는로 설정합니다.
OK?
그래서 지금 우리는 F를 인쇄하는 것입니다.
>> 그래서 우리는 먼저 스타 X를 인쇄하는 것입니다.
그래서 스타 X는 무엇인가?
또, 스타 X 수단으로 이동 X가 가리키고있는 것.
그래서 X는에 0x123 이동을 저장하는 것입니다.
우리는 50를 얻는다.
그래서 F를 인쇄 할 수 있습니다.
그리고 그것이 50를 인쇄 할 것을 의미한다.
그리고 반환합니다.
>> 그리고 우리는 두 번째의 printf있다.
우리는 지금 %의 P입니다.
당신이 그것을 본적이 없다면, 그건 당신이 포인터를 인쇄 얼마나.
그래서 우리는 퍼센트 나, 퍼센트가 F, 이미 그 모든.
그래서 %의 p는 포인터를 인쇄 할 수 있습니다.
>> 그래서 X는 포인터입니다.
우리가 자체 x를 인쇄거야 그렇다면, 우리는 내부에 실제로 무엇을 인쇄하는
X, 0x123 그래서 첫 번째입니다 인쇄 F (50)를 인쇄하는 것입니다.
두 번째 인쇄 F는 것입니다 그래 0x123을 인쇄?
>> 청중 : 당신은 퍼센트를 사용하십니까 X 포인터를 인쇄하려면?
>> ROB : 그래서 당신이 퍼센트를 사용합니까 X 포인터를 인쇄하려면?
그래서, 당신은 할 수 있지만 %의 X는 단지입니다 일반적으로, 같은를 위해 당신은 어떤이있는 경우
정수 당신은 인쇄 할 그 진수로.
그게 당신이 그렇게 얼마나입니다.
>> %의 d는 것, 반면에 소수로 인쇄 할 수 있습니다.
우리가 퍼센트를 얻을 수 없다는 것을입니다 D. 난 그냥 정수입니다.
퍼센트 P는 구체적이며 포인터에 대한.
>> 그래서 X는 포인터입니다.
우리는 퍼센트 (P)를 사용합니다.
그러나 %의 X가 작동 할 수 있습니다.
그래?
>> 청중 : [들리지?
>> ROB : 네.
적어도이 호출 - 그래서 여기에 포함되지 않았다.
그러나이 두 개의 인수가 필요하다 이 스택 프레임의 내부
모든 지역 변수와 함께 printf와는 사용하는 발생합니다.
그리고 그 다음 호출은 지금의 printf printf의 스택 프레임의 내부입니다
%의 P의 백 슬래시 n 및 어떤 X의 값은 0x123입니다이다.
그래?
>> 청중 : [들리지?
>> ROB : 그것은 뭔가를 인쇄 할 수 있습니다 즉, 다음과 같습니다.
>> 청중 : [청취].
>> ROB : 그래서 그 주소 형태로 출력합니다.
이 주소처럼 보인다.
그래?
>> 청중 : [들리지?
>> ROB : 왜 무엇입니까?
>> 청중 : [들리지?
>> ROB : 왜 포인터가 4 바이트?
그래서 모든것이 있습니다 이 앞의 0의의.
그래서 정말 0x0000000123입니다.
64 비트 시스템에서이있을 것입니다 더 제로의 전체 무리.
그래?
>> 청중 : [청취].
>> ROB : 그래서 첫 번째의 printf 인쇄 할 것입니다 -
>> 청중 : [청취].
>> ROB : 네, 인쇄 할거야 어떤 X가 가리키는.
별이 무엇인지 말한다 가리키는 것.
그것을 잡아.
그래서 가리키는는 무엇인가?
50.
그것을 잡아.
즉, 우리가 인쇄거야거야.
다음 하나는, 우리가있어, 반면에 단지 자체가 x를 인쇄.
무엇 F의 내부에?
0x123.
OK.
>> 그리고, 마지막으로, 우리는 자유가 있습니다.
우리는 무료로 전달하는?
우리는 X를 전달하고 있습니다.
실제로 표시되는 그 시간 그것은 스택 프레임에.
>> 그래서 우리는 값을 전달하고 0x123은 무료입니다.
그래서 지금 자유는 모든 권리를 알고 나는 힙까지 가야
무료로하는 메모리.
더 이상 무엇을 사용하지 않는 것 주소 0x123에있다.
>> 그래서 자유가 발매 예정 힙에서 해당.
지금 우리의 힙을 다시 비어 있습니다.
우리는 어떤 메모리 누수가 없습니다.
지금 무료로 반환합니다.
x는 여전히 0x123 것을 알 수 있습니다.
하지만 지금은 유효하지 않은 메모리입니다.
우리는 역 참조 X 더 이상해야합니다.
그래?
>> 청중 : 0 중복을 반환합니까?
>> ROB는 : 0 중복을 RETUREN 있습니까?
예.
우리는 그냥 그 둘 때문에 우리는 공기의 반환을해야합니다.
그래서 그래, 할 수처럼, 반환 0이 (가) 있습니다.
그래?
>> 청중 : [들리지?
>> ROB : 그래서 무료 X 후, 어떤 일이 발생하는 경우 우리는 포인터를 역 참조하려고?
그것은 잘못되는 일이 없어야하는 것이 가능합니다.
그것은 우리가 아직 (50)를 얻을 수 가능성이 있습니다.
>> 그것은 그 메모리는 것을, 또한 가능 지금은 다른 것에 사용된다.
그래서 정의되지 않은 동작입니다.
그리고 정의는 무엇을 의미 발생할 수 있습니다.
그래?
>> 청중 : [들리지?
>> ROB : 아니, 그래서 당신은 할당하는 경우 X 뭔가 다른.
그렇다면 여기 우리는 X가 동일했다 다른 malloc에 무엇인가 -
malloc에 크기 이벤트 -
그 원래의 블록 의 메모리가 해제되지 않습니다.
그리고 우리는 공식적으로 그것을 잃었다.
즉, 메모리 누수입니다.
우리는 모든 참조를 잃었습니다 메모리의 블록.
그래서 우리가 이제까지을 확보 할 수있는 방법은 없습니다.
OK, 그럼 수행 0 수단을 반환합니다.
>> 좋아요, 스택 오버 플로우.
여기에서 아이디어는 무엇입니까?
그래서 힙이 추락 기억.
스택 올라가고있다.
그래서이 강의의 예이고, 주요 단지 예정 어디 생각
것입니다이 함수 foo를 호출 재귀를 통해 자신을 호출하고
또 다시.
>> 그래서 스택 프레임에 가고있다 정확히 동일하게 작동합니다.
그래서 우리는 주와 함께 시작하는거야 아래 스택 프레임으로.
다음 주에는 foo는 호출하려고하는 스택 프레임을 얻을 것입니다.
>> 그런 다음 foo는 foo는 호출 할 것입니다 다시 얻기 위하여려고하는
다른 스택 프레임.
그리고 나서 다시, 또 다시, 다시 결국, 우리는 실행까지
힙에.
그래서 이것은 우리가 얻는 방법입니다 스택 오버플.
그리고이 시점에서, 당신은 세그먼트 오류.
아니면 당신이 정말로 전에 세그먼트 오류 것 이 시점하지만 그래.
>> 청중 : 코어 덤프입니다 세그먼트 오류와 같은?
>> ROB : 그래서 당신은 분할을 볼 수 있습니다 결함 코어 덤프.
당신은 코어 덤프 때 얻을 당신은 세그먼트 오류.
그리고 그것은 모두의 덤프처럼 현재 메모리의 내용이 너무
당신이 시도하고 식별 할 수 왜 오류 발생에 세그먼트.
그래?
>> 청중 : [들리지?
>> ROB : 그래서 세그먼트 오류 의미 스택 오버플로가있다.
그래서 반드시.
세그먼트 오류는 걸 의미 방식으로 감동 메모리
당신은 할 수 없습니다.
그래서 일어나는 하나의 방법은, 때 당신은 스택 오버플로, 우리는 접촉 시작
우리가 안되는 방법으로 메모리.
그래?
>> 청중 : [들리지?
>> ROB : 그래서 무한 루프의 내부.
마찬가지로,이 재귀 무한처럼 루프 그래서 우리는 서로를 얻을
스택마다 프레임.
하지만 그냥 일반의 내부 한 동안 무한 -
음, 심지어 F를 인쇄하지 말자 -
작업을 수행합니다.
뭐든간에.
>> 우리는 얻지 않을 것입니다 다른 스택 프레임.
우리는 단지 루프를 유지하는 것입니다 이 단일 명령을 통해.
스택은 성장하지 않습니다.
그것은 사실 각 재귀 전화는 우리에게 스택 프레임을주고있다.
우리는 스택 오버 플로우를 얻을 이유입니다.
그래?
>> 당신이 얻을 수 있다고 그래서 경우 : 관객 while 루프 다음 [들리지?
>> ROB : 그래서 while 루프의 안쪽에있는 경우 printf와는 여전히 것, 거기
세그먼트 오류 없습니다.
난 그냥 일을 혼동하고 싶지 않았다.
그것은 루프 것이다.
당신은 하나의 스택을 얻을 것 printf의 프레임입니다.
>> 다음의 printf를 반환합니다.
그런 다음 다시 루프를 인다.
당신은 하나의 스택을 얻을 것 printf의 프레임입니다.
그것은 반환합니다.
하나의 스택 프레임.
그래서 당신은이 무한한 얻을 수는 없을 겁니다 스택 프레임을 쌓아.
>> 청중 : [들리지?
>> ROB : 예.
그래서이 스택 오버 플로우가 발생 때문에 이들의 없음
foo에 대한 호출이 반환됩니다.
우리가 반환한다면, 우리는 것 스택 프레임을 잃고 시작합니다.
그리고 우리는 스택 오버 플로우하지 않을 것입니다.
당신은 기본 케이스를 필요 이유입니다 개인 기능.
그래?
>> 청중 : 잠재적 인 크기와인가 에 대해 동일한 힙 스택
모든 프로그램?
>> ROB : 대략.
전위 스택의 크기 및인가 모든 프로그램의 힙 같은?
대략.
일부 임의가 여기서 스택이 시작되고
힙이 시작하는 위치.
당신의 전체를 많이해야하는 일이 있다면 전역 변수와 가지, 당신은 수도
일부 공간에서 빼앗아 당신의 힙.
>> 64 비트 시스템에서, 당신은 거의 무한 기억이.
너무 많이가있다.
32 비트와 64 비트 사이에, 그 중요한 차이입니다.
>> 당신은 훨씬 더 많이받을거야 스택 및 64 비트에 힙 공간
그냥 더있어 시스템 때문에 그들이 사용할 수 다룬다.
그러나 개별 시스템에, 그것은 것입니다 스택의 대략 같은 양의 수
힙 공간.
괜찮아요.
>> 그래서 마지막 것은 편집이다.
그래서 당신은이 과정을 알고 있어야합니다.
4 개의 큰 단계가 있습니다.
그래서 첫 번째해야 기억하기 쉽다.
사전 처리.
그것은에 접두사 사전이 있습니다.
그래서 다른 모든 전에 온다.
>> 기억해야 할 것은 해시입니다.
그래서 해시 정의하고 해시 포함 이들의 모두.
사람들은 이전의 모든 프로세서이다 지시어.
이러한 것들이 프리 프로세서는 처리한다.
>> 그래서 미리 프로세서는 무엇을 하는가?
그것은 정말 바보 같은 일입니다.
그것의 능력은 모두 이러한 모든입니다 복사, 잘라 내기 및 붙여 넣기 작업.
>> 그래서 해시 표준 I0 점 (H)을 구비하고있다.
무슨 일인가요?
이것은 표준 I0 점 H를 잡는 것 파일 및 상단에 붙여 넣기
해시를 포함 말한다 곳 표준 I0 점 H.
>> 그리고 모든 해시는 우리를 그렇게 정의 볼, 무슨 일인가요?
그 값을 복사하는 해시 정의는 것과 붙여 넣기 정의
만약이 값을 사용하고 목적지.
따라서 처리기는 정말 않습니다 간단한 텍스트 작업을 기반으로.
그것은 스마트 아무것도하지 않습니다.
그래서 다른 모든 것들입니다 더 복잡한.
>> 그래서 지금 처리기입니다 다, 우리는 실제로 컴파일합니다.
그래서 무엇을 의미하는 경우 컴파일합니까?
우리는 지금 C 코드에서거야 어셈블리 코드.
그래?
>> 청중 : [들리지?
>> ROB : 그래, 우리는 그것을 잡았다.
그래서 컴파일.
우리는 C에서 어셈블리에 대한 것입니다.
그래서이 실제 언어의 변화이다.
자체 컴파일에서가는 의미 더 높은 레벨의 언어
낮은 수준의 언어.
>> c는 하이 레벨 언어 조립에 비해.
어셈블리는 무엇입니까?
, 사랑스러운 그 지침 많은 당신의 CPU에했다.
그러나 컴퓨터는 여전히 수행 조립 이해하지.
그것은 단지 1과 0을 이해한다.
그래서 다음 단계는, 조립 된 이 지침에서 우리를 제공하는
당신의 CPU가 실제로 이해하고 로 번역한다
1과 0.
>> 어셈블리에 대한 이진 C있다.
하지만 아직 실행이되지 않습니다.
그래서 CS50 라이브러리 생각합니다.
우리의 바이너리를 제공 한 하는 GetString가이 CS50 라이브러리,
과의 getInt와 모든 것을.
>> 그러나 CS50 라이브러리 -
그 자체 - 실행 파일이 없습니다.
그것은 주요 기능을 가지고 있지 않습니다.
그냥 이진의 무리의 당신이 사용할 수있다.
그래서 연결은 우리가 함께 가지고하는 방법입니다 서로 다른 바이너리 파일
실제 실행에.
입력 할 수있는 하나의 점은 밖으로 점을 슬래시.
>> 그래서 이것은 파일처럼 썼다 - 당신의 프로그램이 무엇이든 -
Ceaser 점 C.
하지만 지금은 컴파일 된 것 진에 이르기까지.
그래서 Ceaser 점 오.
그리고 이것은 우리의 CS50 라이브러리 바이너리입니다.
그리고 그들은 결합되고있어 단일 실행에.
그래?
>> 청중 : [들리지?
>> ROB : 그래서 첫 번째 기억 포함, 해시가 실제로 포함
전처리 단계.
그러나 별도의.
당신은 어떤 기능을 사용하지 않는 경우 해당 , 다음 하나의 파일의 외부에있는
아니, 당신은 아무것도 연결하지 않아도 당신은 모든 것을 가지고 있기 때문이다.
>> 즉, 말, printf와는 안으로 연결되는
당신이 이제까지의 printf를 사용하는 경우, 그 뭔가 그것은에 연결해야합니다
당신은 기록하지 않았기 때문입니다.
그리고, 사실, printf와는 자동으로 안으로 연결
당신은 어떻게 명령 줄에서 또는시기를 알 당신이 만드는 입력, 당신은이 참조
링크가 대시 리터 CS50, CS50 라이브러리?
printf와, 그와 같은 물건, 것입니다 자동으로 연결합니다.
아무것도에 대한 다른 질문?
>> 청중 : [들리지?
>> ROB : 연결?
우리는 전체 무리의이 다른 바이너리 파일.
이것은 정식 예입니다 우리는 CS50 라이브러리로 사용하는 것이.
우리는 컴파일과에 준 이 CS50 라이브러리 진.
>> 당신이하는 GetString을 사용하려면 여러분의 프로그램에서.
그래서 당신은 가서하는 GetString을 사용합니다.
하지만 내 바이너리 코드없이 당신은 당신의 코드를 컴파일 할 때, getString에
아래로, 당신은 실제로 실행되지 않을 수 있습니다 프로그램하는 GetString 문자열이기 때문에
아직 완전히 정의되지.
>> 당신이 내 진 링크를 경우에만의 그는 이제 모두하는 GetString을 포함
바로, 사실은 수 하는 GetString을 실행합니다.
내 파일이 완료됩니다.
그리고이를 실행할 수 있습니다.
그래?
>> 청중 : 변환 연결합니까 실행 파일의 바이너리?
다른를하지 않아도 경우에도 도서관은 여전히되지 않을 것
번역을하는 데 필요한 [들리지?
>> ROB : 그래서 실행 진에 아직도있다.
그것은 단지 전체를 결합하는 것 바이너리의 무리.
>> 청중 : 대단히 감사합니다.
>> ROB : 문제 없습니다.
다른 질문?
그렇지 않으면, 우리는 모든 설정입니다.
괜찮아요.
감사합니다.
>> [박수]
>> 청중 : 감사합니다.
>> ROB : 네.