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