제이슨 허쉬 호른 :에 오신 것을 환영합니다 A5에, 여러분. 우리는 앞으로 우리의 흥미 진진한 주를 많은 새가 있습니다 주로하기 때문에 이 방에 직면 해있다. 그것은 훌륭합니다. 여러분의 많은 사고가 여기에 있습니다, 하는 더 나은 것입니다. 그렇게 잘하면 당신은 우리에 가입하겠습니다. 이번 주에 우리는 보낼거야 섹션의 벌크 퀴즈를 준비. 우리의 의제 당 그래서, 우리는 이야기 할 것입니다 클래스의 자원에 대해 조금, 또한 퀴즈 후, 다시 클래스 이야기의 대부분을 지출 질문에 대해. 우리는 응답 완료되면, 당신의 질문 경우, 또는 질문 자연스럽게 나는 몇 가지 코드에 우리를 인도 중간 고사에서 샘플에 문제가 우리가 절에 라이브 코딩됩니다 지난 함께 일부 다른 키웠다 커버하는 좋은 주제. 그래서 첫 번째, 우리는에 겪었어요로 당신을 생각 나게하는 주 지난 몇 사람, 자원의 톤이있다 이 과정에 사용할 수 있습니다. 그들 중 많은 사람들이 매우 도움이 될 것입니다 당신에게 당신에 계속 퀴즈 0 공부 때문에 그것은 화요일 오후입니다. 그래서 모두가왔다 조금 공부. 강의 노트와 소스가 있습니다 코드 당신이해야 확실히 확인. 반바지를보세요. study.cs50.net를 확인하세요. 그리고, 다수에게, 아래에 나열된 다른 자원. 또, 퀴즈 0 내일 1시에서. 아직 수행하지 않은 경우, 확인 에 관하여 퀴즈 0 문서 중 파악하는 과정의 홈페이지 당신은 퀴즈를 복용하는 곳. 퀴즈 1:10에서 시작 칠십분 후 종료됩니다. 당신 1:10 이후에 표시하는 경우에, 당신은있어 많은 적은 분을 얻을 것 (70)는 퀴즈를하는 것보다. 그래서 당신이 제 시간에 거기 있는지 확인하십시오. 당신은 연장 학생이야 나있는 경우 다른 테스트를 고려, 그것은 1시 내일하지 않을 수 있습니다. 그러나 다시, 약 퀴즈 0 확인 당신이시기를 알 수 있도록 문서화 당신은 퀴즈를 복용하고 있습니다. 내가 여기까지 75 분 썼다. 그 70, 옳지 않다 생각합니다. 그것은 일주일에 0에서 모든 자료를 포함 수요일에 지난 주 강의. 그리고 또,이 퀴즈에 대한, 그 당 문서는, 하나의 양면을하고 8 당신이 얻을 용지 11 장으로 1 / 2 퀴즈 동안 노트로 사용할 수 있습니다. 많은 사람들이, 대부분의 사람들은,이 아닌 경우 발견 한 가장 도움이되는 방법 퀴즈 공부를하는 것은이다 연구 시트를 만들 자신의 1 SIDER. 그래서 과거의 사람을 보면 당신은 과거의 사람을 본 적이있다. 볼 친구에게 다가 무엇을 그들은 그들의 퍼팅입니다. 그러나 손을 아래로, 당신이 할 수있는 최선의 방법 연구는 모든 것을 통해 이동하는 것입니다 무엇을해야하거나해야하는 큰칼 아래로 의 장에 속하지 종이, 그건 그냥 정말 때문에 당신이 있는지 확인하는 데 도움이 방법 당신은 모든을 통해가는거야 그것은 어느 정도 알고있다. 대부분의 사람들은, 우리가 찾을 경우에도 그들이 용지의 오른쪽에 앉아있다 퀴즈에 그 옆에 설정하지 않는다 그것을 다시, 바로 그 때문에 정보를 통해가는 과정 그들이 그것을 배울 수있었습니다. 아무도 질문이 있습니까 퀴즈 0 어떻습니까? 모두가 - 나는 손의 쇼를 할 거 아니에요. 마음 마십시오. 나는 사람을 물어가는 공부를 시작했다. 하지만 난 당신을 만들고 싶어하지 않는다 당신의 손을 들어하지. 내가 말했다 같이 - 예, 아비는 진행. AVI : 어떤 유용한 일이 될 것입니다 한 호출기에 넣어? 학생 : 당신에게 달려 있습니다. 제이슨 허쉬 호른 : 당신이 얻을 당신의 판단을 사용합니다. 한 호출기에 넣어 유용한 것들, 당신은 큰 O에 대해 혼동하는 경우 검색의 다른 유형의 런타임 그리고 종류는, 거기에 그 넣어 편리한 멋쟁이 차트. 그 방법, 당신은에 그 질문을하는 경우 퀴즈, 당신은 시도도 할 필요가 없습니다 그 중 또는 런타임을 통해 이유. 당신은 그것을 아래로 복사 할 수 있습니다. 당신은 퀴즈의 과거를 많이 보면 시간은 시간 문제가 실​​행중인. 그래서 그 좋은 예가 될 것입니다 당신의 한 호출기에 두는 것. 당신이하는 경우에 넣어 다른 좋은 것들 선언하는 방법에 대한 혼란 기능 또는 어떤 다른 부분의 함수 선언은 쓰기입니다 그 거기에, 일반 버전 그리고 아마 예. 당신이 포인터에 대해 혼란스러워하는 경우, 포인터 일이 얼마나의 다이어그램 아마 정말하였습니다. 당신은 재귀에 대해 혼란스러워하는 경우 거기에 재귀 함수를 샘플링 또한 정말 도움이 될 증명할 수 있습니다. 그것은 당신에게 몇 가지 아이디어를 제공합니까? AVI : 당신은 이해할 필요가 같은 전체 컴파일 과정 어떻게 모든 작동하는지? 제이슨 허쉬 호른 : 모든 즉 덮여있다 할 수 퀴즈에 표시됩니다. 질문 - 그러나 다시, 몇 가지가있을 것입니다 다른 사람보다 가중치가. 몇 가지가 다시왔다 다시 클래스에서 강의 및 절. 다른 것들은하지 않은 그 자주 온다. 우리는 # include 및에 대해 많이 얘기했습니다 - 난 뭔가 어떤 사람들은에 의미 컴파일 과정. 우리는 집착, GDB에 대해 많이 얘기했습니다 우리가 사용하는 다른 플래그 때 우리는 무언가를 컴파일하고, 무엇을 make15, 예를 들면, 실제로 의미와 정말 않습니다. 우리에 대한 많은 이야기를하지 않은 모든 단일 단계 컴파일 과정. 우리는 여전히 그것에 대해 얘기했습니다. 그래서 여전히 뭔가 잘 알고 있어야합니다. 그러나 다시, 우리는 않을거야 - 수업 시간에 더 자주 올 일 더 올 가능성이 더 높습니다 자주 그리고 더 많이 할 수 퀴즈에 가중치. 쿨. 퀴즈 0에 대한 다른 질문? OK, 그래서 목록을 넣어 보드의 항목을 참조하십시오. 나는 강의를했다. 나는에서 검토 섹션을 갔다 올 지난 밤에 그 슬라이드 항목이 아닌 완전한 목록과 우리는 CS50 지금까지 덮여 있는지 물건이 수도 퀴즈에 나타납니다. 그래서 나는 통과하지 않을 것이다 이러한 모든 하나 하나. 즉, 훨씬 더 걸릴 것 우리가 지금 가지고있는 것보다 시간. 그러나 나는 희망 조그에 여기까지 득점 볼거리에로 당신의 기억이 수도 또는 당신과 같은 익숙하지 않을 수 있습니다. 그리고 대부분의를 보내고 싶어요 에 대한 질문에 대답 섹션 이러한 항목, 항목이 여기에 포함되지 않습니다. 우리는 의사 코드를 작성할 수 있습니다. 우리는 실제 코드를 작성할 수 있습니다 확인하는 방법이 - 나는 당신의 질문에 대답하고 도움이 될 수 있습니다 모두가 근본적으로 이해 이러한 항목을 많이 느낄 것이다, 그래서 예정으로 준비하고 안락한 퀴즈 내일. 그래서 목록을 통해 읽을. 당신은 희망 섹션에왔다 몇 가지 질문을뿐만 아니라. 준비가되면, 당신의 손을 들어 우리는 시작됩니다. 명심하십시오, 질문은 당신이, 어리석은 질문이 없습니다. 우리는 많은 것을 들었습니다. 그리고 당신이 가지고있는 질문은, 나는 기꺼이 많은 다른 사람들을 모두 내기 여기 앉아서보고 뿐만 아니라 온라인으로있다. 그래서 당신은 단지 사람들을 도울 수 질문을 질문. 마커스. 마커스 : 스택 사이의 힙, 미리 할당이 있습니다 로 정의 된 메모리의 비율 이 스택 또는 힙입니다? 아니면 정확히 어떻게 그 일을합니까? 제이슨 허쉬 호른 : 지금 질문입니다. 나는 조금 추적 백업거야. 모두를합니까 - 여기에 정직하십시오. 내가 인상을 요구하는지 알아 당신의 동료의 앞에 손. 하지만 기분이 사람들이있다 스택과 힙 불편 것을 통해 가고 싶습니다 그 무엇을 의미합니까? 손을 경우 인상 - OK. 감사합니다. 그래서 우리는 스택에 갈 예정입니다 힙 정말 빨리 다음 귀하의 질문에 대한 답변으로 이동합니다. 우리가 표현하는 상자를 끌어 그렇다면 컴퓨터의 메모리에, 일부는 무엇입니까 이 상자에 갈 일? 메인. 주요 기능. 어디 주요 가고 있는가? 학생 : [청취]. 제이슨 허쉬 호른 : 그래서 우리는거야 여기 아래 주를 넣어. 다른 어떤이 상자에 간다? 학생 : 전화 기능. 제이슨 허쉬 호른 : 기능 우리는 전화있다. 그리고 그들은 어디로 가야합니까? 학생 : 스택. 제이슨 허쉬 호른 : 그들은 스택에 이동합니다. 그래서 우리는이 전화를 겁니다 여기까지 일 스택. 그리고 상단까지, 우리는 힙이 있습니다. 그래서 기억은이 같은 상자가 아닙니다. 그러나 실제로 매우 유사하다. 그것은을 통해 상자를 많이 될 것 이상에 따라 얼마나 큰 당신의 컴퓨터 또는 메모리가 얼마나 큰입니다. 견적 작자 "바닥"에서 스택이다. 그리고 여러 가지가있다 즉, 스택에 이동합니다. 그리고 사람들은 기능에 따라 달라집니다 당신은 당신의 코드가 있습니다. 당신은 항상 하나의 기능이 당신의 코드는 기본이라고, 그래서 거기에 항상 여기 아래에있는 절 메인에 전념 스택. 스택의이 섹션 스택 프레임이라고합니다. 다른 함수를 호출 할 때, 주 말 이진 검색 함수를 호출 우리는 스택에 다른 프레임을 넣어. 보다 구체적으로, 우리는 가고있다 의 메모리 덩어리를 기부 우리 이진 검색의 지방을 저장하는 컴퓨터 변수와 바이너리를 실행하는 검색 코드. 그래서 우리는 이진 검색을 호출합니다. 이 메모리 덩어리에서, 우리는거야 지역 변수를 저장합니다. 우리는 printf의 호출을 저장하는 것입니다. 무슨 일이 있어도, 그 기능은 바로 거기에 저장 될 것. 이진 검색을 실행하는 것입니다. 그것은 실행을 완료 할 예정이다. C 단어는 무엇입니까 것을 의미 기능한다는 것을 실행을 완료? 학생 : 돌아갑니다. 제이슨 허쉬 호른 : 돌아갑니다. 그래서 return 문을 볼 때마다, 함수 단부 그것은 그 안타. 그래서 이진 검색은 수익에 타격을 줄 것으로 예상된다. 메모리의이 부분은 본질적 것 최대 해제. 그리고 주요 다시 실행에 갈 것입니다. , 전화가 있었다 어디든지 주를 일시 중지됩니다 이진 검색, 일부 반환 값을 얻을, 실행을 계속합니다. 이 스택 프레임은 멀리 갈 것입니다. 우리는 재귀 함수를 호출하는 경우 자체를 통해 호출 함수이다 이상, 우리는 얻을 수 있습니다 - 우리는 말 재귀 적으로 이진 검색을했다. 우리는 이진 검색 버전을 얻을 수 있습니다 이진 검색 두, 이진 검색 세, 이진 검색 네, 이진 검색 다섯. 그리고이 마지막 이진 검색 다섯 기본 경우, 스택에 타격을 줄 것으로 예상 프레임은 돌아가 폐쇄를 유지합니다 우리는 다시 기본에 도달 할 때까지. 우리는 약간의 재귀를 통해 갈 수 있습니다. 당신이 있다면 그러나 모든이는 말을하는 것입니다 한 번에 여러 기능을 호출 여러 스택있을거야 스택에 프레임. 힙, 한편, 업 여기에 기능을하지 않습니다, 없는 지역 변수. 그것은 동적으로 할당에의 변수. 그래서 이들은이 될 수있는 변수입니다 주 또는 하나의 초기화 그 주요 함수 호출. 어디서나 코드에서, 그들은 초기화 할 수 있습니다. 그리고 동적으로 초기화를 할당 된 변수입니다. 우리는 C에서 어떤 기능을 사용합니까? 학생 : MALLOC. 제이슨 허쉬 호른 : MALLOC. 당신의 malloc를 호출합니다. 당신은 메모리의 공간을 얻을. 그리고 메모리의 공간 힙에 있습니다. 그리고 메모리의 공간을 유지 당신은 무료가 호출 할 때까지. 그래서 동적으로 할당 된 변수 힙은 당신만큼 존재한다 그들이 존재하려면, 그들은하지 않습니다 명시 적으로 될 때까지 사라 멀리 가서 그들에게 말해. 당신은 하나의 함수에서 그들을 만들 수 있습니다. 즉, 함수의 스택 프레임은 멀리 갈 것입니다. 그러나 변수는 여전히 존재합니다 힙에가 해제 될 때까지, 잠재적으로 호출 기능에 의해 이진 검색 또는 무엇이든. 그래서 그 힙 변수가 남아 원하는만큼에 대한 그들이 숙박 시설을 제공합니다. 그리고 그들은 여기에 넣어보세요. 그리고 그 다음 하나는 거기에 넣어 가져옵니다. 그들은 채워지고 유지하고 당신은 무료로 호출 할 때까지 거기에 머물. 그리고 본질적으로, 힙 및 스택, 마커스의 질문을 받고 서로를 향해 성장합니다. 그들은 서로에 실행하는 경우, 당신은했습니다 모든 메모리를 사용하여 컴퓨터 및 프로그램이 종료됩니다 당신은 더 많은 메모리를 가지고 있지 않기 때문에 사용 떠났다. 그들 사이에있다 잠재적으로 다른 것들. 그러나이 과정의 범위, 당신을 위해 그것에 대해 걱정할 필요가 없습니다. 그래서 대답했다 귀하의 질문에. 걱정 말아요. 하지만 그 긴 대답했다. 당신이 알아야 할 모든 것입니다 힙 및 스택 것입니다 - 하나는 아래에서 시작한다. 스택은 않습니다. 힙까지있다. 그들은 서로 가까이 성장할 것입니다. 그들이 접촉하는 경우에, 그게 문제입니다. 당신의 메모리가 부족합니다. 뿐만 아니라, 알고 이외에 곳 그들은 무엇에 모두 저장되어있다 스택과 힙. 커티스. CURTIS : 그들이 충돌 할 때, 그 스택 오버플로가 있습니까? 제이슨 허쉬 호른 : 그들은 충돌, 즉, 스택 오버 플로우 아니다. 스택 오버플로가 다른 영역입니다 당신이 원하는 경우에 우리에 갈 수있다. OK, 우리는 조금 후에 다시 돌아올 것이다. 학생 :라는 단어가 무엇입니까 서로 충돌 할 때, 스택과 힙? 제이슨 허쉬 호른 : 지금은, 에 대해 걱정하지 마십시오. 그냥 알 - 나는 그 질문에 대답합니다 클래스 후. 서로에 실행하는 경우, 당신은 도망 더 이상은 없습니다 메모리, 때문에 이 공간. 학생 : 죄송합니다, 세그먼트 오류가 무엇입니까? 제이슨 허쉬 호른 : 세그먼트 오류가 요구 될 수있다 - 원세그 잘못이라고 왜 따라 달라집니다. 때때로, 스택 오버 플로우, 그것은거야 세그먼트 오류로 비난 말한다. 학생 : 어떤 역 참조에 대한 널 변수? 그 세그먼트 오류가 있습니까? 제이슨 허쉬 호른 : 역 참조 널 포인터 - 좋아, 그럼 당신은 포인터가있는 경우 null로 동일한 설정, 포인터, 리콜, 저장 메모리 주소 자신의 값으로. 그리고 널 포인터는 본질적으로 0을 저장, 0 번째 그 변수의 주소. 그래서 0X, 0, 0, 0, 0, 등등. 하지의 메모리에 즉, 0 번째 주소 우리의 그림에서, 그 거기의 어딘가에, 그는 곳이지 컴퓨터. 우리는 그것을 터치 할 수 없습니다입니다. 그래서 프로그램이 실행이되면, 경우 뭔가 메모리로 이동하려고합니다 주소 0, 그것은 것을 알고 그 빈 값입니다. 그것은 아무것도 없을 것 알고있다. 그래서 당신은 뭔가를 시도하고 사용하는 경우 와 같은 뭔가를 치료하거나 해당 위치로 이동하기 위해 노력하고, 당신이있어 세그먼트 오류 또는 오류가 발생하는 것. 그 질문에 대한 답변을합니까? 그리고 지금 우리는 다시 간다 스택 오버플로합니다. 너희들은이 같은 스택의 관광 명소, 이전에 볼 수있는 -의 친한를 그려 보자 스택 프레임의 닫습니다. 모두가 그것을 볼 수 있습니까? 그래서 우리는 우리의 스택 프레임이 있습니다. 우리는 로컬로 배열을 저장하고 이 함수의 변수입니다. 그래서 우리의 배열이 다섯 부분이 있습니다 말한다. 그 중 다섯이 저장됩니다 이 스택 프레임. 우리는 저쪽에 쓰기 시작하면 이 배열의 경계 - 그래서 우리는에 쓰기 시작하면, 의 그 0의 가정 해 봅시다. 사람들은 다섯 인덱스입니다 우리의 배열의 형태가됩​​니다. 우리는 인덱스 5로 쓰기 시작하면 어떤 우리가이있을 때 우리는 필요가 없습니다 크기 5의 배열은, 우리로 쓰기 시작 인덱스 6, 7, 8, 9, 우리는 스택을 얻을 수있다 오버플로 오류가 발생했습니다. 일반적으로 그렇지 않습니다 - 당신은 아마 문제에 얻을 것이다 당신은 하나를 통해 이동합니다. 그러나 일반적으로, 당신은으로 얻을 것이다 당신이 많이 가서하면 대부분의 문제 당신은 지금까지 이상 당신이 쓰는 것을 이동 그것의 반환 주소에 에 위치 기능, 스택 프레임의 하단. 오른쪽 때문에? 당신 -에 - 죄송합니다. 없음 "바로 때문입니다." 스택 프레임에서,이 지역 변수. 스택의 맨 아래에 프레임의 반환 주소입니다. 즉, 함수의 위치 끝나는대로 간다. 그리고 당신은 그 반환을 덮어 쓸 경우 주소,이 스택 프레임 때, 당신은 스택을 통과 할 때 프레임과 각 라인을 실행, 당신은있어 새 반환 주소에 가서 그 대신으로도 쓰여 실제 한. 그리고 그것은 우리가 본 방법 일부 보안 침해 컴퓨터에서 발생할 수 있습니다. 그래서 스택 오버플로, 짧은에서, 당신은 스택의 일부를 덮어 당신은, 지방을 사용 하잖아요 변수는 당신이 사용하는 가정하고있어 특히 당신이 덮어 쓰기 시작할 때 등 중요한 것들 주소를 반환합니다. 당신이 오류가 될겁니다. 또는 어쩌면 당신은 시작할 수 도에 쓰기 - 이진 검색했다 말 우측 메인 위. 당신은 당신에게, 많이 덮어 쓴 경우 메인으로 작성할 수 있습니다. 그러나 일반적으로, 당신은 이전에 오류가 발생 컴퓨터가 인식 한 후, 때문 당신은 당신이 뭔가를하고있는 일을 할 수 없습니다. 그래. 학생 : 차이 무엇입니까 스택 오버 플로우 사이 및 버퍼 오버 플로우? 제이슨 허쉬 호른 : 버퍼 오버 플로우 보다 일반적인 유형입니다 방금 설명한 것을. 학생 : 그래서 스택 오버플로가 있습니다 버퍼 오버 플로우의 예. 제이슨 허쉬 호른 : 그렇지. 이것은 우리로 생각할 수있는 배열입니다 버퍼, 높은가는 것들에 대한 공간 이는 스택 버퍼 오버 플로우이다. 우리는 힙 버퍼 오버 플로우가있을 수 있습니다. 거기에 종종 버퍼는,이 있다면 배열은 힙, 그리고 우리 그 경계를 덮어, 우리는 것 힙 버퍼 오버 플로우가있다. 그리고이 과정의 범위를 넘어, 그들은 약간 다르게 감지하고 있습니다. 컴파일러는 특별한이 각을 검출하는 방법. 그러나 버퍼 오버 플로우가 더 일반적인 것입니다 나는이 기술 한 무슨 유형, 어떤 스택 버퍼 오버 플로우했다. 즉, 귀하의 질문에 대답 했습니까? 달콤한. 다른 질문 관련이 있었다 스택이나 힙? 그래. 학생 : 당신은 무료로 문자열이 알고 그들은 힙이기 때문에 당신은 메모리 누수가 싶지 않아요. 하지만 전역 변수를 해제해야합니까 그와 같은 것들? 아니면 자동으로 해제됩니다? 제이슨 허쉬 호른 : 좋은 질문입니다. 그래서 CS50.H, 우리는이 일을 만들 에 대한 문자열을했다. 문자열은 정말 무엇인가? 학생 : 샤아 스타. 제이슨 허쉬 호른 : 문자 스타, 포인터 문자, 포인터 문자의 배열. 즉, 문자열이 무엇인지입니다. 그래서 우리는 그것을 해제 할 필요가 있기 때문에 하는 GetString, 이는 우리가 많이 사용 - 문자열 이름을 사용하여 GetString 같습니다 - 그것은 우리에 대한 몇 가지 메모리를 mallocs 힙 다음에 대한 포인터를 반환 그 첫 번째 문자 문자열, 문자 스타. 그래서 표면적으로, 당신은되지 않은 경우 당신의 문자열 중 하나를 무료로 작성 지금까지라고 했으므로이 일부 메모리가 누수되고. 물론 우리는 이야기하지 않은 그것은, 그래서 아무도는에 못 듣게 되 잖아요 그 일에 대한 문제. 그러나 네, 앞으로. 당신이하는 GetString을 호출 할 때입니다 힙에 약간의 공간을 mallocing. 그리고 당신은 나중에 전화를 무료로하지 않는 경우 문자열, 당신은 메모리 누수가. 즉, 귀하의 질문에 대답? 네 학생 : 그래서 그렇게, 우리는 사용합니까 반환하기 전에 무료 맞죠? 마찬가지로,의 범위 내에서, 내가 생각하는 경우 우리는 내 주요 중간, 같은 말 그 안에서의 정보 코드의 범위 중괄호, 직전 - 당신이 알고 어디 좋겠 일반적으로 수익을했습니다. 당신은 그 전에 무료로 넣어합니까? 제이슨 허쉬 호른 : 그래서 당신은 무료로 넣을 수 있습니다 당신은 무료로두고 싶은 곳. 이 동적으로 할당되므로 변수, 그들이 할 수 있기 때문에 특정의 범위를 넘어 살아 기능, 당신은에서의 malloc를 호출하는 경우 별도의 기능, 예를 들면, 하는 GetString, 당신은 주 무료 호출 할 수 있습니다. 당신은 그것을 호출 할 필요가 없습니다 특정 기능에 malloc에​​ 호출입니다. 그러나 당신은 그것을 호출 할 필요합니까 주요 반환되기 전에. 그리고 정말 따라 달라집니다. 그것은 당신이 것을 malloc으로 할당 된 이유에 따라 달라집니다 처음에 공간. 어떤 사람들은 부를 것이다 꽤 빨리 무료. 어떤 사람들은 때까지 전화를 무료로하지 않습니다 자신의 프로그램의 끝. 그리고 그들은 갈 거에요 무료 다. 그것은 당신의 malloc이라는 이유에 따라 달라집니다. 학생 : 그리고 당신은 무엇을 말할 것 당신이 사용하는 GetString을 호출하면? 당신은 무엇을 무료로 말할 것? 제이슨 허쉬 호른 : 그래서 구문 무료 단순히 무료 오픈 괄호, 부근에 있습니다 괄호 및 포인터의 이름. 그래서 당신은 문자열 이름 같음을 작성하는 경우 하는 GetString, 여기에 이​​름을 올려 놓을. 즉, 포인터의 이름입니다. 그리고 그 메모리를 무료로 알고 있습니다. 학생 : 그것은 그 메모리를 해제 그래서 때, 포인터는 여전히 그 곳을 가리키는 메모리? 나 또한 비운 포인터입니다 이 가리키는 주소. 제이슨 허쉬 호른 : 우리는 그것을 시도해야합니다. 우리는 코딩해야합니다. 우리가 얻을 때의 돌아 오게 코딩과의 그 코딩 할 수 있습니다. 그리고 당신은 대답을 파악하려는 경우 즉, 당신은 할 수 또한 코드가 그 사이에. 그러나 그것은 좋은 질문입니다. 학생 : 그것은 할 수있다 너무 빨리 무료 뭔가? 그래서 당신은 아직도 당신의 프로그램을 위해 필요, 당신은 메모리 공간을 해제? 제이슨 허쉬 호른 : 예. 그것은하면 가능하다 뭔가를 무료 다음 다시 사용, 당신은 것입니다 오류로 실행합니다. 당신이 해제 때문에 즉, 당신에의 다음 뭔가 나중에했다. 그래서 프로그래머의 실수였다. 그러나 예. 당신은을 작성할 수 있습니다. 에 더 이상 질문 - 예. 학생 : 그래서 당신이 해야하는 경우 단지 전에 일반에 무료로 프로그램은 경우에 그 의미 하는가, 종료 프로그램을 종료하고 당신이 그것을 해제하지 않습니다, 그 메모리는 여전히 할당? 제이슨 허쉬 호른 : 프로그램이 종료되면 당신은 뭔가를 무료로 잊지 그 메모리는 전체에 할당 된 프로그램의 수명. 프로그램이 완전히 닫힐 때 그 기억은하지 않을 것입니다 영원히 머물. 컴퓨터가 알만큼 똑똑하다 그 프로그램이 종료 할 때, 모든 메모리를 제거해야한다는 이 프로그램과 관련되었다. 그러나 실행할 수있는 도구가 있습니다 탐지하는 프로그램에서, 만약 때 프로그램은 잊었 완료 일부 메모리를 해제. 그리고 당신의 다음 문제에 대한 위치 설정 당신의 malloc를 사용하여 사용할 것 포인터는,이 실행됩니다 있는지 확인하기 위해 프로그램에 대한 프로그램, 때 주요 반환, 당신은 몇 가지가 있었다 똑 같이 남겨진 것들. 그래서 그들은 malloc으로 할당 된 유지하지 않을거야 영원히 당신의 컴퓨터에있는. 즉, 낭비입니다 때문에 매우 빠르게, 컴퓨터 메모리가 부족합니다. 그러나 그들은 당신이 끝날 때까지 실행하는 경우 프로그램 그들은 해제 및 않는다 당신의 프로그램은 여전히​​ 문제의, 종료 이 도구가 도움이 될 것이라고 당신이 해결합니다. 학생 : Valgrind의는 무엇입니까? 제이슨 허쉬 호른 : 그건 Valgrind의했다. 그리고 당신은 할 수 있습니다 - 학생 : 그러나 우리는 알 필요가 없습니다 그 퀴즈,하지만? 내 말은, 그것은 이야기했다 강의에 조금. 제이슨 허쉬 호른 : 그래서 Valgrind의 해당 도구의 이름입니다. 그것이 무엇을 아는 것은 퀴즈 충분. 하지만 당신은에 아직 사용하지 않은 당신의 우리가 가지고하지 않았기 때문에 문제가 설정 명시 적으로 처리하고있다 문제 세트 malloc에​​ 또는 당신의 malloc를 사용하여. 그래서 당신은 아직 Valgrind의를 사용하지 않았습니다. 하지만 당신은 빨리 그것을 사용합니다 나중에보다는 오히려. 학생 : 당신은 반복 할 수 있습니다 무엇 Valgrind의는? 제이슨 허쉬 호른 : 죄송합니다? 학생 : 당신은 무엇을 반복 할 수 있습니다 Valgring의 목적은? 제이슨 허쉬 호른 : Valgrind의 이름입니다 - GDB는, 당신은 당신의 프로그램을 디버깅하는 데 도움이 같은 Valgrind의 당신이 파악하는 데 도움이되는 경우 상황이 해제되지 않은 프로그램이 종료 할 때. 그래서 당신은 당신의 프로그램에서 실행됩니다. 그리고 프로그램이 종료, 그것은 말할 것 프로그램은 malloc에​​이 많은라고 이 바이트에 대한 시간, 그리고 단지이 많은 시간은 무료했다. 그리고 이러한 바이트를 왼쪽으로 해제되지 않고. 아니면 당신이 모든 것을 해제 있다고 말할 수 있습니다. 잘 했어. 학생 : OK. 그리고 그것은 Valgring라고? 제이슨 허쉬 호른 : V-A-L-G-R-I-N-D. 학생 : 포인터에 대한 질문. 그래서 만약 당신이 N 스타했다고 밝혔습니다 X는 무엇인가 같습니다. 즉, 퍼팅 무엇 이건, 동일 거기는 무슨 일이 안에 넣어되는 것입니다 어떤 X가 가리키는, 또는 X의 포인터? 제이슨 허쉬 호른 : 당신은 할 수 질문을 반복? 당신이 말을하는 동안 우리가 그릴 수 있습니까? 학생 : 퀴즈, 실제로, 당신이 우리를 보낸 사람은, 그것은 문자 같았다 스타의 진실, 오른쪽 CS50 바위 같다? 그래서 의미 않는 그 CS50 바위 진리가 가리키는 무엇인가? 제이슨 허쉬 호른 : 그래서 당신이 얘기 문자열에 문자 스타에 대한 방법 그 작품? 그래. OK. 여기서 이상이를 그려 보자. [사이드 CONVERSATION] 제이슨 허쉬 호른 : 그래서이 변수 char 형 스타가 될 것입니다. 변수는 얼마나 큰 char 형 스타? 얼마나 많은 바이트? 학생 : 네. 제이슨 허쉬 호른 : 그것은 4 바이트입니다. 변수는 얼마나 많은 권리입니다 int 형 스타? 학생 : 네. 제이슨 허쉬 호른 : 4 바이트. 이 포인터 있다면, 그것은 항상 4 바이트 때문에 포인터 그들의 값은 메모리 주소이다. 그리고 CS50의 메모리 주소 장비는 4 바이트 길이입니다. 그래서 우리가하는 GetString 때, 또는 우리를 호출 할 때 말하자면, 문자열 이름은에서 다음에 해당하고, 큰 따옴표는 문자열을 넣어, 우리는 퍼팅 - 음, 그건 좀 다릅니다. 우리는 예를 들어, getString에 할 것이다. 또는 문자 스타 일 문자열 같습니다. 죄송합니다, 나에게 예제를 제공 당신은 읽어? 학생 : 문자 스타의 진실은 동일 따옴표 "CS50 바위". 제이슨 허쉬 호른 : 그래서이 별이 우리는이 변수 x를 부를 것 우리의 일반적인 목적. 우리는 X라는 변수를 만들었습니다. 그것은 char 형 스타입니다. 이 시리즈에 대한 포인터 문자. 그래서 여기까지 - 그래서이 방법이이 것입니다 메모리에서 작동합니다. 이 메모리 어드레스를 저장하는 것이다. 이 메모리 어드레스의 저장 것 배열의 첫 번째 문자. 그리고 그 때 당신은 다음에 포인터, 당신은 것 첫 번째 문자를 얻을. 그리고 당신처럼이 일을 읽는다면 문자열은 컴퓨터가 스마트 아는 것만으로는 충분이 전체를 읽어 그것은 반발 0에 도달 할 때까지. 하지만 당신은에 그것을 문자를 읽는다면 시간은, 그래서 당신은 반복입니다 이 캐릭터는, 당신은 단지를 읽 한 번에 문자가 나타날 때까지 백 슬래시 0. 즉, 응답하지 않을 수 있습니다 귀하의 질문,하지만. 학생 : 네,하지만 당신이하지 않은 malloc으로 할당하는 공간 아직 그 포인터. 제이슨 허쉬 호른 : 그래서 꽤 확실하지 않다 정확히 당신이보고있는, 나는 그 퀴즈를하지 않았기 때문입니다. 그건 도움이 될했는데 다른 TF에서 자원. 당신은에 문자열을 작성하는 경우 스택 또는 지역 변수로, 그것은거야 다만 전하의 배열이 아닌 수 가리키는 일반적으로 문자 스타 다른 문자열. 하지만 난 모르겠어요. 즉, 다른 포인터가 될 수 스택에 문자열뿐만 아니라. 그래. 학생 : 당신이 할 필요가 있다는 것을 알고 포인터 인 경우 메모리를 할당 내부 선언지고 또 다른 기능. 당신은 만약 같은 일을 할 필요가 메인의 안쪽에 선언되는, 당신은 메인의 안쪽에 사용하는? 제이슨 허쉬 호른 : 그래서 그래. 당신은 어떤에 대한 포인터를 선언 할 수 있습니다 메모리의 메모리 주소. 그것은 지역의 메모리 주소가 될 수 있습니다 변수, 자주하지만, 사람들은 메모리 주소를 선언하지 그들이 이동하기 때문에 지역 변수 그 함수가 반환 멀리하면, 어떤 우리가 일반적으로 물건을 MALLOC 이유입니다. 하지만 그래, 당신은 포인터를 선언 할 수 있습니다 다른 지역 변수. 그것은 단지 일반적으로 수행 아니에요. 하지만 난 그에서 좀 걸릴 수 있습니다 클래스 후 특정 일. 그래. 학생 :이 종류의 생각 뭘 바라는지의. 이 초기화되는 이상한 보인다 하지로의 포인터 주소,하지만 같은 것을 값처럼 보인다. CS50 안에 무엇이있는 것처럼 보인다 점은 지적하고되고 하지 실제 주소, 오른쪽? 제이슨 허쉬 호른 : 그래서의 없는 경우, 그래도. 즉, 무슨 일이 아니다. 당신은 문자 별을 선언 할 때, 그것은 메모리 어드레스이다. 포인터는 모든 메모리 주소입니다 다른 것을 가리키는. 다른 그 무엇인가에있을 수 스택,하지만 거의 항상에 우리가 사용하는 볼 방법으로 힙. 하지만 문자열 이름은 큰 따옴표와 동일 "getString는"우리는 볼 수 있습니다 그리고 우리 이를 통해보고하고 코딩 할 수 있습니다. getString에 문자열이 저장되지 않는 그 변수, 또는 어떤 문자열 이름이 저장되지 않고있다 변수, 그 때문에 어떻게하지 포인터는 작동합니다. 그 의미가 있습니까? 학생 : 네. 제이슨 허쉬 호른 : OK. 바라 건데, 그게 아니었다 사람에게 혼란. 그것이 있다면, 우리는 다시 볼 수 있습니다 조금의, 우리가 실제로거야 때문에 희망을 갖고 무언가를 코딩 문자열과 함께 작업하고 느낄 수 있도록 도와 그들과 함께 더 편안합니다. 이들과 관련된 다른 질문 주제 또는 다른 주제에 그 나는 백업을 놓을 게요? 그리고 - 지금. 예, 알덴. ALDEN : 그래서이 완전히 관련이없는, 그러나 우리는 단지에 갈 수 있습니다 정말 빨리 우리가 알아야 할 사항 (32)과의 차이에 대해 64 비트 컴퓨터? 제이슨 허쉬 호른 : 예. 그래서 32 비트 얼마나 많은 바이트? ALDEN : 그것은 4 바이트입니다. 제이슨 허쉬 호른 : 그것은 4 바이트입니다. 그리고 64 비트는 얼마나 많은 바이트? 학생 : 8입니다. 제이슨 허쉬 호른 : 8 바이트. 그래서 다시, 8 비트는 한 바이트이다. 귀하의 CS50기구입니다 32 비트 시스템. 그래서 메모리 주소는 긴 4 바이트. 2는 32에 있습니다 메모리 주소. 0 32 - 1에 2. 그리고 나는 긍정적 아니지만, 그건 당신이 무엇을 필요 아마 범위 32 비트 컴퓨터에 대해 알고 메모리 주소는 다시 4 바이트 길이입니다 그리고 그 최대 금액의 메모리 주소. 또한, 데이터 타입 - 이는있을 수도 있습니다 그럼 주목할 가치가있다. 데이터 형식의 크기에 따라 달라집니다 당신이 작업하고있는 기계. 그래서 문자, 하나의 문자는 어떻게 우리 CS50 어플라이언스 바이트? 한 바이트. 그리고 실제로는 하나의 바이트로의 또한 64 비트 컴퓨터에. 대부분의 데이터 타입은 동일한 수있다 두 컴퓨터에서 바이트. 그러나 일부 데이터 형식이 다를 수 두 시스템에. 그래서 잠재적 것 당신이 알 필요가있는 유일한 것은. 그러나 심지어는, 제가 생각하기에, 경계를 넘어 - 다시 보면 나는 거의 확실 해요 이전 퀴즈에, 그것은 말한다, 대한 가정 당신이 사용하는 코딩 문제 32 비트 시스템. 그러나에 그와 함께 가고, 거기 당신이 관심이있는 경우가 있습니다 동일한 데이터 유형 모든 시스템에서 크기. 당신이 뭔가를 본 적이 있다면 uint32_t, 당신은 수도 있고 수도 그 보았다 없습니다. 즉, 데이터 형식입니다. 즉, 32 비트 상관없이 할 말있다 이 무슨 컴퓨터에 있습니다. 그래서 사람들은 휴대용을 작성하는 경우 코드, 그들은 아마 정수를 사용하지 않습니다. 그들은 대신에 다른 데이터를 사용합니다 그들이 알고있는 유형은 동일합니다 모든 단일 시스템에서 크기. Madhu. MADHU : 나는에 대한 질문을했다 컴파일 과정. 그래서 당신이 사용하는 프로그램을 작성하는 경우 CS50이나 뭐 같은 라이브러리 그런 식으로, 내가 알고 해당 라이브러리 어떤 시점에서,이어야 컴파일 안으로 연결 하지만 얼마나 그 중에 발생 프로그램의 컴파일? 해당 라이브러리 과정의 어떤 부분 당신이있을 때 발생합니다 자신의 프로그램을 컴파일? 제이슨 허쉬 호른 : 그럼 해보자 이 과정의 일반적 단계. 당신은 당신의. C 파일을 작성합니다. 당신의. C 파일에서 #을 포함하여 헤더 라이브러리, 예를 들면, cs50.h. 샤프 포함하는 것이 무엇을 수행 라인은 프로그램에 무엇입니까? Akchar. AKCHAR : 그것은의 프로토 타입을 추가 헤더의 기능 라이브러리에있는 파일입니다. 제이슨 허쉬 호른 : 그렇지. 그것은 그 함수 프로토 타입을 추가 코드에. 코드는 컴파일되고 그래서 때 초기 단계, 컴파일러는 알고있다 이러한 기능은 실제로 존재하고 있음을 그 어딘가가 정의되어 있습니다. . h 파일에 포함되지 않습니다 이러한 기능에 대한 정의 나 방법 그들은 실제로 작동합니다. Cs50.h은 말한다 뭔가를 포함 하는 GetString는 진짜입니다 발생할 수 있습니다. 그리고 standardio.h는 printf의가 말한다 일어날 수있는 실제 물건. 그래서이와 함께 C 언어. 헤더 파일은 몇 가지로 설정됩니다 기계 - 판독 가능한 코드, 이는 결국 바이너리로 전환됩니다 코드, 0과 1. 그리고 그 코드의 그 궁극적으로 실행됩니다. - 난 CS50 라인 - 예를 들어, 당신은 연타를 작성하는 경우 - 다음는-L을 CS50를, 당신은 안으로 그 입력 그리고 당신은을 참조하십시오. 당신이 만드는 쓸 때, 당신은거야 여기까지 그 라인을 참조하십시오. 그리고 우리는 두 번째에있는 것을 볼 수 있습니다 때 우리는 코드 또는 나중에 때 우리의 코드에. 하지만 - 난 CS50 라인은 무언가를 보다 약간 다른 #은 cs50.h. 포함 그-L의 CS50 라인은 무엇입니까? 아비? AVI : 나는 그것이 링크라고 할 함수 라이브러리 . 오 파일처럼 호출합니다. 제이슨 허쉬 호른 : 그래서 매우 가까운 자리 -에하지 않을 경우. - 난 CS50는 바이너리 파일을 받아 바이너리 파일로 병합합니다. 그래서 cs50.h 터닝 아무 소용이 없다 모든를 이진수로 C 언어에서 cs50.h 그것이 사용되는 싱글 시간. 즉, 바보 같은 것 때문에 그 많은 시간을 낭비한다. 따라서 이미 컴파일 된 및 실행 파일로 설정. 그리고 지금은 합병 될 것입니다 끝 부분에 파일로. 그래서 그 일의의와 공의는거야 당신의 사람과 병합 그리고 끝에 0의. 그래서 지금 당신은 실제로 실제있을 것이다 1과 0의 방법을 사용하여 GetString을 정의하는, 예를 들어, 작동 또는 방법의 printf 예를 들어, 작동한다. 그리고 자세한 내용은, 거기에 네이트는 것을주는 짧은 컴파일러 당신은 간다 확인해야 이 단계를 통해. 그러나 - 예. 학생 : 그들은 항상 있습니까 O 파일. 그들은 라이브러리 형태로있을 때, 같은 - 연결, 통합 준비 그들은 바이너리 코드에있어? 제이슨 허쉬 호른 : OK. 무엇 - 학생 : 그게 항상의 경우 도서관은 당신이 그들을 연결할 때? 제이슨 허쉬 호른 : 예. 그래서.들 수 있습니다 이미지, 거기에 또한있을 것입니다 기계 코드, 당신에게 비밀. 당신은 그에 대해 걱정할 필요가 없습니다. 그러나 일반적으로, 그래, 그들은거야 O 갈 준비가 파일을합니다.합니다. 학생 : 그래서 당신을 발송할 때 라이브러리는, 당신은 발송 하는가 . h와. 오? 당신은. c 또는.의를 발송하지 않는다. 제이슨 허쉬 호른 : 그래서 - 그리고이 경우뿐만 아니라,이 짧은에 이러한 정보는보기 오는 것으로 보인다 조금 빨리. 그러나 컴파일러의 짧은 이에 대해 이야기뿐만 아니라. 당신이 라이브러리를 발송할 경우, 경우에 발송 . 시간, 헤더 파일, 그 함수 프로토 타입, 그리고 1과 0의를, 그건 당신이 줄 필요가 전부입니다. 당신은 줄 필요가없는 방법 기능은. C 파일을 작동합니다. 때문에 추상화의 지점 또는 API를 지적,이 SPL의 점, 스탠포드 휴대용 라이브러리, 그것의 당신은 걱정하기위한 방법에 새로운 GRect는, 작동 또는 작동 방법 이동 방법이나 작품을 추가합니다. 당신이 알아야 할 모든 것을 추가합니다 당신이 할 수있는 기능입니다 사용하고,이 작업을 수행합니다. 그래서 당신이 정말로 알 필요가 없습니다 방법 이 C. 당신에 쓰여은 필요 알고, 여기에 기능은, 그들이 수행하고, 여기에 1과 0은 당신이 정말로 그들을 사용하려는 경우. 쿨. 컴파일러에 더 이상 질문 또는 보드에 다른 주제? 학생 : 나는 질문이 재귀 기능을 구현. 재귀에 대한 질문. 나는 올 것이다 느낌을 가지고 있었다. 그래서 신속하게 통 특정와 재귀 예를 들어, 계승 함수입니다. 이것은 예를 들어 있기 때문에 그 자주 등장하거나 사용 재귀를 설명하기 위해. 그래서 "네!" 4 요인으로 읽을 수 있습니다. 4 요인은 무엇을 의미합니까? 그 기능은 무엇입니까? 어떻게 4 계승을 계산합니까? 4 회 3 회 2 회 1. 4 계승을 작성하는 그래서 다른 방법 이를 작성하는 것입니다. 4 회 3 계승. 3 요인이기 때문에 3 회 2 회 1. 그래서 4 회 3 요인은 4입니다 회 3 회 2 회 1. 요인이 큰 이유입니다 재귀 후보, 그것 때문에 뭔가가 분명히 있음을 에 이상 이상 이상 발생 사물의 작은 숫자까지 당신은 끝에 도달. 당신이 1에 도달하면, 1 요​​인은 1입니다. 당신은 훨씬 더 갈 수 없습니다. 0 팩토리얼은 1로 정의된다. 당신이 1 또는 0으로 얻을 때, 당신이있어 마지막에, 당신은 할 수 있습니다 다시 올라가고 시작합니다. 우리는 재귀를 쓰고 싶다 그래서 경우 계승을 계산하는 기능, 우리는 몇 가지를 작성하는거야 그 지금은 의사. 우리는 의사 코드를 작성하기 전에 - 나는 너희들에게 몇 분을 줄 것이다 의사 코드를 작성하거나 생각하는 그것에 대해 - 매 2 가지가 있습니다 재귀 함수가 필요합니다. 그 두 가지가 무엇입니까? JACK : 그것은 자신을 호출 할 수 있습니다. 제이슨 허쉬 호른 : 노아? 오, 잭. 어서. JACK : 그것은 자신을 호출 할 수 있습니다. 제이슨 허쉬 호른 : 그래서 재귀 함수, 재귀 호출을 필요 자신을 호출합니다. 그 하나입니다. 그리고 다른 점은 무엇입니까? JACK : 기본 케이스. 제이슨 허쉬 호른 : 기본 케이스. 기본 케이스는 우리가 중지 할 때 여기에 있습니다. 따라서 함수가 호출됩니다. 기본 케이스가 먼저 온다. 당신은 당신이 마지막에 있다면 알고 싶어요. 그리고, 마지막에 당신이하지 않은 경우 재귀 호출을 확인합니다. 그리고, 다시이 기능을 통해 이동 다시 기본 케이스를 확인합니다. 당신이 종료하지 않은 경우, 당신은 할 다른 재귀 호출, 기타 등등, 등등. 그 이유는 재귀 함수 항상 그 기본의 경우 그 필요 재귀 호출. 당신은 재귀 호출이없는 경우, 재귀 함수 없을 것입니다. 당신은 기본 케이스를 가지고 있지 않은 경우, 당신은 영원히 갈 것 어떤 결말이있을 수 없을 것입니다. 그리고 기본 케이스가 항상 먼저 온다, 당신은 항상 검사 할 것이기 때문에 먼저 끝에 있다면. 우리는 어떤 의사를 그래서 전에, 왜 당신이 생각하는 분을지지 않습니다 어떻게 재귀 계승 기능 기록 할 것인가? 또한, 당신이하고있는만큼, 쓰기 종이 한 장에 그 중입니다 당신은해야 할 것입니다 무엇 내일 퀴즈 않습니다. 수 있도록 그래서 아마 좋은 방법 당신이 작성하는 코드 용지에 다운 - 또는 당신은 할 수 있습니다. 세미콜론이 어디에 당신은 알고있다. 당신은 구문을 기억한다. 당신이 할 수 없게 때문에 컴파일러는 오류가 만든 말. 또한, 그 라인, 내일, 함께 할 때 당신이 경우 당신은 문제를 코딩 한 시간을 급하게, 또는 당신은 매우 있다면 당신이 거 야 방법에 대한 혼란 C에서 특정 일을 기록, 그 의사 코드를 작성하는 당신을 behoove 수 것 나뿐만 아니라 주석을 작성합니다. 에 대한 부분의 신용이 때문에 퀴즈에 대한 질문을 많이합니다. 그래서 당신은 당신이 급하게, 또는 수 있습니다 다만 혼동 될 수 있습니다. 의견이나 의사 코드 작성 자주 방법입니다 당신 부분 점수를 얻을 수 있습니다. 그래서 뭔가를 남기지 않는 퀴즈에 빈. 에 대한 처벌은 없다 안으로 물건을 넣어 사실, 의사 코드 또는 퍼팅 코멘트 학년을 도울 것입니다 당신이 실제로 알고있는 경우 알아낼 것을 당신은 아마 상을 이야기하고있어 당신이 몇 가지 부분 점수. 또한, 그 라인을 따라, 명확하게 작성합니다. 우리가 정말 당신이 작성하는 수없는 것을있는 경우, 우리는 당신을 호출하지 않을거야 그림에 자정 내일 당신이 쓴 무엇인지. 우리는 단지 포인트를 벗을 것입니다. 그래서 우리는 오히려 듣고, 또는 수 있습니다 명확하게 쓰기, 우리는 당신이 쓴 글을 읽을 수 있습니다. 그리고 두 문장을 말한다면, 단락을 쓰지 않습니다. 지시 사항을 따르십시오. 명확하게 작성합니다. 그리고 그 의견에 작성하거나 질문에 대한 의사가 할 수 수상 부분 점수. 좋아, 계승 가자. 그래서 우리는 기능의 요인이있다. 실제로 C이 작성했다, 경우 내가이 이름 앞에 둘 필요합니까 함수의? 반환 형식이있는 한, 경우, 우리는 그것을 INT를 줄 것이다. 다음 괄호 안에 있습니다 무엇을 위해 중괄호 안에 간다 기능? 학생 : 인수 유형. 제이슨 허쉬 호른 : 인수. 그래서 계승 것이다 아마 인수를. 그것은 아마도 하나의 인수를합니다. 그리고 우리는 걸릴거야 말거야 정수는 X를했다. 그리고 또, 프로토 타입을 작성할 때 함수 또는 함수를 작성 , 당신이 그것을 정의하기 전에 코드에서 데이터 분류와 이름을 써 해당 기능이 변수. 그래서 당신은이에 몇 가지 숫자를 전달할 수 있습니다 함수는 X로 지칭 될 것이다 내부. 우리는 우리의 계승 기능이있다. 우리는 두 가지, 기본 케이스를 필요로 그리고 재귀 호출. 계승에 대한 기본 케이스는 무엇입니까? 그것을 쓴하지 않은 사람 아직 말, 기본은 무엇인가 계승 케이스? 학생 : N이 작은 경우 2보다 1을 반환합니다. 제이슨 허쉬 호른 : N 인 경우 2 이하, 1을 반환합니다. 내가 좋아하는 그, 그 때문에 0과 1을 담당. 그래서 우리는, X <2 할 1을 반환합니다. 우리가 얻는 경우에 우리는, 0을 전달받을 경우 일 합격,이 함수는 것 바로 1을 반환합니다. 우리는 몇 가지 숫자 이상을 전달받을 경우 2보다 같, 우리는거야 우리의 재귀 호출이 있습니다. 그리고 어떻게 그 일을하려고? 수있는이 일에 다른 사람 누가 아직 얘기하지 않은 것은 나에게주는 이 함수에 대한 재귀 호출 의사에? 우리는 숫자를 X로 전달받을 경우 그리고이보다 크의 정보, 주변 우리가하고 싶어? 우리는 또한 예에 쓴 당신에게 힌트를 줄 수있는면. 학생 : X 시간 전화 X 마이너스 1의 계승? 제이슨 허쉬 호른 : 맞아 맞아. 우리는 X 시간을 반환하는거야 X 마이너스 1의 계승. 그리고, 내가 쓴하더라도, 그 기본적으로, 당신이 영어라고하는 것은, 이 계승 기능 다시 호출되는 것입니다. 그것은 X 마이너스 1에서 실행됩니다. 그것은 어떤 정수로 반환하고 있습니다 다음은이 두 가지를 곱합니다 함께, 그 값이 될 것입니다 이 호출 무엇에 반환 계승 기능을하는 힘 다른 인스턴스의 수 이 기능을 계승. 그래서 재귀의 예입니다 기능, 매우 간단한 재귀 함수. 그러나 그들 대부분은 다음과 같이 될 것입니다. 당신은 좋은 순환을 좋아 한 경우 퀴즈에 도전, 코딩 시도 이진 검색 재귀. 때문에 당신은 이진 검색을 한 경우 문제는 세 가지를 설정, 당신은 아마 그것은했다 반복적으로 while 루프에서. 그러나 그것은 또한 쓸 수있다 재귀. 당신은 당신의 자신을 쓸 필요 해요 일부 소요 별도의 기능 다른 명령 줄 인수 - 또는 하지 명령 줄 인수, 일부 다른 그냥 평범한 인수. 하지만 이진 검색을 쓸 수 재귀 적으로뿐만 아니라. 학생 : 그래서 당신은 또한 쓸 수있는, 대신 X 마이너스 1의 경우 또한 X 마이너스를 쓸 수 마이너스, 또는 당신은 할 수 작성 마이너스 마이너스 X. 당신은 정말 신속하게 이유를 설명 할 수 사람들은 여러 가지가 될 것입니다, 차이가 사이에 무엇인지 등 X 마이너스 마이너스 마이너스 마이너스 X? 제이슨 허쉬 호른 : 아니, 아니에요 그것으로 갈 예정. 하지만 이후에 대해 이야기합니다 클래스. X 마이너스 마이너스, 마이너스 마이너스 X (1)에 의해 X를 감소. 그러나 그들은 약간 다르게 해. 하지만 그것으로 가고 싶지 않아. 재귀에 대한 다른 질문 또는이 기능? 정말 의사도 아니다. 즉, 기본적으로 코드의 이를 위해 쓸 것 C. OK, 다른 질문 여기에 주제에 최대 약? 그래. 학생 : 나는의 빠른 개요를 부동 소수점 정밀도. 제이슨 허쉬 호른 : 부동 포인트 및 정밀. 할 수있는 사람이 정말 빨리 나에게 설명해 줄 부동 소수점 정밀도? 당신은 모든 사용자에 대해이 작업을 수행했다 문제는 설정, 그래서 당신은 모든이야 잘 알고. 아니면 모든 여러분. 누군가? 나에게 시작 지점을 제공합니다. 부동 소수점 정밀도. 문제는 무엇입니까? 예. 빅토리아? 바네사 : 바네사. 제이슨 허쉬 호른 : 바네사. 미안 해요. 바네사 : 단지 유한 수 있습니다 표시 할 수있는 수치 당신은,의에이기 때문에 우리의 케이스, 32 비트 시스템. 그래서 당신은 먹을 수도 몇 가지 숫자를 확인합니다. 제이슨 허쉬 호른 : 그래서의 정확히 맞아. 단지 어느 정도의가있다 표시 할 수있는 숫자. 두 개의 매우 큰 숫자를 곱하면, 그것은 양 넘칠 수도 공간의 당신은 표현해야 정수. 때때로 우리가 사용하는 이유 대신 INT의 오래 오래. 즉, 더 많은 공간을 가지고 있습니다. 즉, 더 많은 수를 보유 할 수 있습니다. 부동 소수점 정밀도로 할 수있다 그뿐만 아니라 함께 할 수있다 진수가 있다는 사실 항상 표시되지. 미안 해요. 날이 다시 위로 넣어 보자. 진수 1.0 항상 그렇지는 않아요 당신처럼 표현 기대, 1.000000000. 그것은 때때로로 표시됩니다 1.000000001 또는 0.999999999. 심지어 89가 발생 될 수 있습니다 어딘가에서. 그래서 그 진수는 없습니다 정확히 것 같은 표현 그들이 표현 될 것으로 기대합니다. 그래서 문제에서 설정 - 두 개의인가? - 문제는 우리가 다룬 두 가지를 설정 우리가 원하는 부동 소수점 숫자 그들에게 우리가 원하는 정확히 표현하기 그들을 대표하는, 수 동전 또는 센트의 개수, 우리는 100을 곱합니다. 우리는 그들을 반올림. 그리고 우리는 모든 것을 차단 소수점 뒤에. 즉 보장하는 것이라고 그들은 것 우리가 원하는 정확하게 실제로 동일 그들과 동일합니다. 당신이 뭔가를 가지고 갈 때 그 때문에 떠 당신은, INT로 돌려 오른쪽에있는 모든 것을 차단 소수점. 일부 부동 소수점이 때문에 부정확, 100.000 수 있습니다 99.999999999로 표현. 그리고 당신은 모든 것을 할 수 차단하는 경우 바로 오른쪽, 당신은거야 잘못된 번호를 얻을. 그래. 학생 : 내가 가진 질문 에 대한 캐스팅. 어떤 순서로 발생합니까? 당신은 플로트를 할 줄 경우, 브라켓, 1 분할 10, 1, 10으로 분할 하는가 다음 0.1 얻을, 다음 차례 플로트에? 제이슨 허쉬 호른 : 당신이 할 경우 10로 나눈 1 플로트 - 학생 : 네, 다음에 해당 - 음, 평소 에서이 같은이 - 그래. 당신은 부동 확인하려면, 오른쪽? 제이슨 허쉬 호른 : OK, 그래서 우리는 갈거야 연구 만 반복하는 거죠 해당를 사용 이 질문에 대한 답변 코딩을 통해. 당신은 아마 많이있을 것이기 때문에 이 분의 질문에, 좋은 방법 이를 해결하는 것은 코딩하는 것입니다. 그래서 우리는 지금이 권리를 코딩하는거야 그리고, 우리는 다시 갈 예정입니다 당신이했던 질문을 코딩. 그래서 첫 번째 줄 - 나는 그것을 기록하지 말았어야 - 무엇인가 우리가해야 할 첫 번째 일 때 우리 의 gedit에서 새 파일을 열어? 학생 : 포함합니다. 제이슨 허쉬 호른 : 무엇을 포함? 학생 : CS50 라이브러리. 제이슨 허쉬 호른 : OK. 우리는 다른 무엇을 포함해야합니까? 우리는 단지 어떻게되는지 확인하는 것입니다 당신은 float로 뭔가를 캐스팅 할 때. 그러나 우리는 우리가 인 경우에 포함해야합니까 C 프로그램을 작성하는 것? 학생 : 표준 I / O 제이슨 허쉬 호른 : STDIO.H. 우리는 실제로이를 위해 필요로하지 않는다 프로그램은 cs50.h, 그것은 비록 그것을 포함 항상하였습니다. 그러나 우리는 항상 stdio.h와 필요합니까. 학생 : C에서 코딩 할 때? 제이슨 허쉬 호른 : C로 코딩 할 때 그래서 나는이. C 파일로 저장합니다. 나는 몇 가지 좋은 구문 강조를 얻을. 나는 주 안에 빈 공간을 썼다. 무효는 무엇을 의미 하는가? 학생 : 어떤을하지 않습니다 명령 줄 인수. 제이슨 허쉬 호른이있는 무효 수단, 경우, 기본은 고려하지 않았 음 명령 줄 인수. 다른 경우에, 그것은 함수를 의미 명령 줄 인수를 고려하지 않습니다. 또는 기능은 내가 있다면 무효를 작성 주 (무효), 즉 주의를 말할 것입니다 아무것도 반환하지 않습니다. 그래서 공간은 아무런 의미가 없습니다. 내가한다면 나는 무엇을 쓸 것 명령 줄 인수를? 학생 : INT 아크 C 끈 아크 절 제이슨 허쉬 호른 : INT ARGC 문자열 ARGV. 그 권리인가? 학생 : 그것은 문자 스타 ARGV 브래킷입니다. 제이슨 허쉬 호른 : 그래서 당신은 쓸 수 문자열 argv와 브래킷 또는 문자 스타 ARGV 브라켓,하지만 당신은 괄호가 필요합니다. ARGV 배열 때문에 문자열의 기억. 그것은 단지 하나의 문자열이 아니다. 그래서 문자열 ARGV, 여기에 전부이다 한 문자열 변수는 argv했다. 문자열 ARGV 브래킷, 여기있다 문자열의 배열입니다. 그래서 INT ARGC 문자열 argv와 브래킷 뭔가 될 것이라는 점을 I 아마 쓸 것이다. 그래서 당신은 정수에 저장하고 싶어? 학생 : 네, 정수입니다. 또는 플로트에. 제이슨 허쉬 호른 : 플로트? 마찬가지로, 플로트 X 10로 나눈 1 같습니다. 제이슨 허쉬 호른 : OK. 어떻게 printf와의 float를 인쇄합니까? 무엇? 학생 : % f를. 제이슨 허쉬 호른 : % f를. 정수는 무엇입니까? d 또는 전. 문자열은 무엇입니까? 학생 :의. 제이슨 허쉬 호른 :의. 어떻게 새로운 라인을 얻을 수 있습니까? 학생 : 백 슬래시 명. 제이슨 허쉬 호른 : 나는 무엇을 반환합니까 주요 실행 경우 올바르게? 학생 : 0. 그래도, 그 라인을 작성해야합니까?에게 학생 : 아니오. OK, 우리는 그것을 쓰지 않습니다. 모두가 그것을 읽을 수 있습니까? 그것은 조금 작은 보인다. 모두가 참조하거나해야 할 수 있습니다 나는 그것이 더 큰 만들어? 나는 카메라를 들어, 우리가 만드는 것 같아요 하지만, 그것은 조금 더 큰. 제이슨 허쉬 호른 :이를 설정하려면 . 실행 파일로 파일을 C의 어떤 나는 씁니까?에게 학생 : 시험을합니다. 제이슨 허쉬 호른 : 죄송합니다? 학생 : 시험을합니다. 제이슨 허쉬 호른 : 테스트를합니다. 우리에 대해 얘기했다 이전이 줄. 연타. 그 소리는 무엇입니까? 컴파일러의 이름입니다. 이 라인은 무엇입니까? 학생 : GDB의 사용을 위해 설정합니다. 제이슨 허쉬 호른 : 세트 그것은 최대 GDB의 사용. 이 줄은, 그 무엇인가? 학생 : 소스 코드. 제이슨 허쉬 호른 : 그의 소스 파일,. c 파일의 이름을 지정합니다. 이 두 라인은 어떻게해야합니까? 또는이 두 가지하지 라인. 학생 : 그것은 이름이 테스트합니다. 제이슨 허쉬 호른 : 그래서 대시 O는 말한다, 다르게 뭔가 이름을 지정합니다. 그리고 여기 당신이 테스트를 호출하고 있습니다. 나는 그것을하고 있지 않은 경우, 무엇이 이름을 것인가? 학생 : a.out의. 제이슨 허쉬 호른 : a.out의. 이 기능은 무엇입니까? 학생 : 수학 라이브러리를 링크합니다. 제이슨 허쉬 호른 : 그것은 링크 수학 라이브러리. 우리는 수학 라이브러리를 포함하지 않았지만 즉 너무 일반적이기 때문에, 그들은했습니다 기록 메이크업 항상 포함하는 수학 라이브러리. 마찬가지로,이 포함되어 있습니다 CS50 라이브러리. 우리가 게시하면 OK, 그래서 우리는 지금이 테스트라는 실행. 이를 실행하기 위해, 테스트를 작성합니다. 나는 나의 부동 소수점 것을 볼 예상대로 0 같습니다. 그합니까 - 그래서 - 학생 : 그럼 당신은 넣어 경우, 지금 떠 같은 당신은 플로트로 캐스팅 - 제이슨 허쉬 호른 : 캐스트 부동의 1? 학생 : 아니요, 전체 일을 캐스팅 - 그래. 당신이 그것을 한 경우에, 것 즉, 0.1 만들기? 제이슨 허쉬 호른 : OK, 그래서 정말 빨리, 1은 10로 나눈, 그입니다 정수는 구분된다. 당신은 정수를 나눌 때, 그들은이야 0, 당신은 저장하고이 0에 슬래시이기 때문에, 떠 다만 정수 나누기. 그래서 지금 우리는 뭔가를 꺼예요 플로트에. 의가 어떻게되는지 보자. 우리는 테스트를 할 수 있습니다. 그래서 지금 우리는 슬래시가 아니라는 것을 확인 정수 나누기, 그것은 부동 한 소수점 나누기. 때문에 인수 중 하나 float로 캐스팅되었다. 그래서 지금이 치료, 말하고 있었다 분할 우리가 상대하고있는 등 부동 소수점이 아닌 정수와. 그래서 우리는 우리가 기대하는 답변을 얻을. 의 발생 보자 - 죄송합니다. 나는 이상의 10 진수를 인쇄하려는 경우 명소, 내가 그 방법을 수행 할 수 있습니까? 학생 : 포인트 점 F, 또는 많은 당신이 원하는대로 소수점. 제이슨 허쉬 호른 : 그래서 인쇄 10 진수 명소. 그리고 우리는 지금 우리가 있어요 참조 이상한 물건. 그리고 다시 질문으로 돌아갑니다 에 대한 점의 부정확성 부동. 여기에 저장된 이상한 물건이있다. OK, 그 질문에 대한 답변을합니까? 당신은 다른 무엇을 원했는가 빨리 코드에? 학생 : 그냥 여부를보고 싶어 아니, 당신은 어떤 포인터를 해제하는 경우, 그 포인터가 여전히 저장했는지 여부 그것은이되어 있었는지의 주소 이전에 가리키는. 제이슨 허쉬 호른 : OK, 그래서 그 작업을 수행 할 수 있습니다. 문자 스타 PTR,이 변수를 생성 char 형 스타의 PTR했다. 어떻게의 malloc을 작성하려면 어떻게해야합니까? 알덴? ALDEN : 저스트의 malloc. 하지만 그것의 크기로 있으며, 이 경우, 당신은 것 같은데 숯불을 가리키는 될 수있다. 그래서 문자 것. 제이슨 허쉬 호른 : OK, 그래서 더 일반적으로, 내부 - 의 편집 할 수 있습니다. malloc에​​ 내부, 당신이 수를 할 힙에 바이트. 일반적으로, 우리는 우리가 걸 봤어요 일을 우리가 MALLOC거야입니다 예를 들어, 문자열, 또는 정수의 배열. 그래서 우리는 10 정수 또는 10를 원하는 경우 문자는, 10은 우리에게 10을 제공 할 것입니다. 그리고 문자의 크기는 줄 것 우리 그 문자의 크기에 이 경우는 1 바이트입니다. 우리는 10 바이트를 얻을. 우리는 INT의 크기를 기록했다, 경우 그것은 우리에게 40 바이트를 줄 것이다. 그래서 더 일반적으로, malloc에​​ 내부 원하는 바이트 수이다. 이 경우, 우리는 1 바이트를 얻고. 이상한 사용처럼 보인다 의 malloc,하지만 우리의 목적은 의미가 있습니다. 그래서이있다. 우리는 무료로 전화를 겁니다. 우리는 그것을 제거하고 우​​리는 다시 PTR을 사용합니다. 그리고 당신은 확인하려는 거? 학생 : 그냥 여부를 확인하고 싶어서 또는 아무것도가 아니었다 그것의 내부. 제이슨 허쉬 호른 : 그래서 여부 그것은 무엇을 지적? 학생 : 네, 정확히 여부 여전히 메모리 주소를 가지고 있었다. 제이슨 허쉬 호른 : 그래서 당신이 원하는 PTR의 값을 확인하는 방법? 학생 : 네, 그렇습니다. 제이슨 허쉬 호른 : 나는 여기에 무엇을 쓰는가 나는 값을 확인하려면 포인트 - 무엇인지, 요르단 값은 말했다? 아니면 무슨 일이 PTR의 내부에 저장됩니다? 학생 : 메모리 주소. 제이슨 허쉬 호른 : 메모리 주소. 난 그냥이 쓰기 있다면, 그것은거야 나에게 PTR의 값을 제공합니다. 그리고 어떻게 인쇄합니까 메모리 어드레스? 형식 문자열은 무엇입니까 메모리 주소에 대한? 학생 : % 포인트. 제이슨 허쉬 호른 : % 포인트. %의 문자열입니다. 포인터 % 포인트. 그 권리인가? 그건 바로입니다. 그래서 PTR 같음 - 그것은 여전히​​ 거기에 뭔가가있다. 이것은 아마도 더 흥미로운 질문. 그 라인은 무엇입니까? 학생 : 원세그 오류. 제이슨 허쉬 호른 : 무엇? 학생 : 나는 그것이 오류를에 세그먼트 생각합니다. 제이슨 허쉬 호른 : 흠? 학생 : 나는 세그먼트 오류 것 같아요. 제이슨 허쉬 호른 : 그래서이 선 코드, 스타의 PTR의 어떤 별은 의미합니까? 학생 :의 내용. 제이슨 허쉬 호른 : 네. 의 콘텐츠를 이동합니다. 그래서이 작업은 메모리에 갈 것입니다 거기에 해결하고 줘봐. 나는 여기 %의 C를 사용하기 때문에이 문자가 저장됩니다. 그래서 우리는 그 주소의 우리에 가서 방금 본 - 또는 아마있을거야 조금 다른이 우리가 프로그램을 실행 시간. 그러나 우리는 그 주소로 이동합니다 우리는 여전히 존재 알고있는 거기에 기능을 참조하십시오. 그래서 segfault를하지 않았다. 그것은 우리에게 아무것도주지 않았다. 사실은 우리에게 주어진 수도 무엇인가, 우리는 단지 그것을 볼 수 없습니다. 그리고 다시이 아이디어에 간다 - 우리는에 너무 많이 얻을 않을거야 이, 그 이상이기 때문에 이 과정의 범위. 우리 경우에 우리는 여기에 대해 이야기 에 의해 배열의 경계를 넘어 갔다 1, 우리는 곤경에되지 않을 수도 있습니다. 때때로, 당신은 단지 1로 떨어져 갈 때, 당신은 당신이 뭔가를 잘못하고,하고있어 곤경에 얻을 수 있습니다. 하지만 당신은 항상 문제가하지 않습니다. 그것은 따라 얼마나 나쁜 일의 당신 , 당신은 곤경에받을거야 않습니다. 부주의 할, 말을하지 않는 코드와 함께. 그러나 프로그램이없는 것, 말을하는 것입니다 당신이 어딘가에도 항상 종료 당신은 가고 없을 것 같아. 그 좋은 예는 많이 있습니다 자신의 문제에있는 사람들은 3을 설정하는 15을 확인하지 않은 한 판의 경계입니다. 그래서 당신은 보았다, 왼쪽으로 보았다 바로보고, 정상에보고 아래로. 하지만 확인하지 않은 경우 최고 실제로 보드에있을 거라고. 그리고 그 한 많은 사람들과 그 상태에서, 자신의 프로그램은 일 완벽 곳 보드 때문에 당신이 하나를 간 경우, 메모리에 저장 그 위 또는 확인하는 메모리 주소, 아무것도 없었다 그것에 대해 특히 끔찍한, 그래서 당신의 프로그램이 아니었다 당신을 소리 것. 그러나 우리는 여전히 포인트를 이륙 경우 당신은 그것을 확인하지 않은 당신 때문에 당신이되지 않은 일을하고 있었다 어떻게해야, 당신은 가질 수 큰일. 확률은 당신이 아마하지 않았다,하지만, 수 있습니다. 그래서 이것은, 예, 표시하는 것입니다 우리는 여전히 갈 수 있습니다. 그리고 우리는에 못 타요 이 경우 문제. 우리는 읽고하려고 노력하는 경우 다음 100 자, 우리는 좋겠 아마 문제가 얻을. 그리고 당신은 다음 100을 읽는 코드를 작성할 수 있습니다 문자 일부를 수행하여 원하는 경우 종류의 루프. 그래. 학생 : 우리가 할당 되었기 때문에 그 공간이 실제 값, 우리는 않을 것 실제로 아무것도 볼 수있을 것이다. 우리는 설정으로 시도해야하는 c 또는 무언가를 좋아하는 같은? 제이슨 허쉬 호른 : 지금 질문입니다. 어떻게 그 값을 설정하는 - 코드의 어떤 라인 I 라인에 작성합니까 일곱는 말을 할까? 학생 : 스타 PTR은 하나의 동일 따옴표 따옴표를 종료 ㄷ. 제이슨 허쉬 호른 : 그래서 태우고 문자, C, 해당 위치에, 때문에 다시 그 스타 거기로 이동을 의미한다. 그리고 왼쪽의 경우에 사용 할당 연산자, 즉 동일 서명, 우리가 얻을 않을 거라고 값이 값을 설정 한대로 정말 감사합니다. 이제 어떻게되는지 보자. 우리는 뭔가를 넣어 그리고이 있었다. 우리는 무료로했다. 일부 물건은 아마 무슨 일이 있었 힙에. 그래서 더 이상 존재하지 않습니다. 그러나 다시, 우리는 가지 않을거야 거기에가는에 대한 문제가있다. 나는 설명하기 위해 코드에서이를하고 있어요 이들 중 많은 당신이 가지고있는 질문은, 그들이있어 정말 흥미로운 많은 시간 응답. 그리고 그들은 정말 좋은 질문입니다. 그리고 당신은 그들을 알아낼 수 자신의 경우, 예를 들어, 우리는 절에서 아니에요. 그래. 학생 : 당신에게 보내는하지 않을 때문에 어디 포인터, 당신은 필요가 malloc에​​ 사용합니까? 제이슨 허쉬 호른 : 그래서이 돌아 간다 초기 질문에. [? ?] 그냥 지역 변수인가? 여기 MALLOC는 강력한 없습니다. 여기에 malloc에​​의 사용은하지 않습니다 이 때문에 그 경쟁력 단지 지역 변수. 학생 : 그래서 당신이 할 수있는 문자 스타 PTR 안녕하세요 같다? 제이슨 허쉬 호른 : 아. 그래서 우리는 지금 다시받을거야 초기 질문에. 당신이 만족되지 않은 생각 내 대답과 함께. OK? 그 마음에 드 셨나요? 학생 : 네. 기다립니다. 제이슨 허쉬 호른 : 어디 당신이 밖으로 인쇄 할 수 있습니까? 그래서 우리는 그와 같은 문자열을 인쇄 할 수 있습니다? 학생 : 재미. 제이슨 허쉬 호른 : 그래서 이것은이 말한다 인수는 문자의 형식이 있습니다. 그래서이 문자이어야한다. 학생 : 그냥 처음 걸립니다. 제이슨 허쉬 호른 : 그래서이 내가 전에 말했듯이 것입니다. 마치 내가 그것을 저장 안했다 변수 포인터 내부 문자열입니다. 그것은 저장하는 것 - 학생 : 첫 번째 값 문자열의. 제이슨 허쉬 호른 : 주소 문자열의 첫 번째 값을 반환합니다. 우리는이를 인쇄한다면, 우린 포인터의 내부 값을 가져. 그리고 우리는, 그것은 참으로입니다 볼 수 있습니다 메모리 주소. 그 의미가 있습니까? 미안 해요. 그것이 당신의 대답이, 대기 질문,하지만? 학생 : 네. 제이슨 허쉬 호른 : 코드 줄입니다 문자열 다음 다른를 만들기 을 지적하는 변수 포인터 해당 문자열에 해당 배열. 그래. 우리는 하나의 메모리를 갔다 그래서 경우 ​​: 학생 더 해결, 우리가 시간을 얻을 것인가? 그것은 문자열로 저장되어 있습니까? 제이슨 허쉬 호른은 : 마찬가지로, 우리는 한 - 그래서 이것은 할 가치가있다. 이것은 소수점 연산, 너희들이다 이전에 볼 수 있고해야 상대적으로 편안합니다. 이 기록에 가깝다 - 우리는이 코드 라인을 작성했다, 경우 우리는 이전에 배열 표기법을 본 적이있다. 이것은 우리에게 두 번째를 제공해야 이 배열, 시간 가치. 우리가 이런 짓을하면이 또한 제공해야 우리가 배열의 두 번째 값입니다. 이는 메모리에없는 것입니다 때문에 우선 주소 만 하나 이상의 물건의 메모리 주소. 그리고 스타 운영자 역 참조 그 포인터. 그리고 다시 보자. 우리는 다시 시간을 얻을. 학생 : 어떤 정확히 수행 의미 역 참조? 제이슨 허쉬 호른 : 역 참조 이동에 대한 멋진 단어입니다. 그에게 가서 거기의 정보 포인터 역 참조입니다. 그러기 엔 그냥 멋진 단어입니다. 우리는 인쇄를 원하는 경우 : 학생 전체 문자열은 할 수 우리 앰퍼샌드 포인터를합니까? 제이슨 허쉬 호른 : OK, 우리는 여기에 일시 정지하는 것. 우리는 여기서 끝나지 것입니다. 앰퍼샌드는 당신의 주소를 제공합니다 위치, 그래서 때의 앰퍼샌드을 변수는, 당신에게 주소를 제공합니다 그 변수가 저장되는 위치. 앰퍼샌드 포인터가 줄 것이다 PTR은 메모리에 PTR의 주소. 우리는 계속하지 않을거야 이 예제와 함께. 당신은이를 알아낼 수 자신에 대한 것들. 그러나 다시, 이것은도 목전 수 있습니다 당신이 알아야하는 것 이상의 비트 이 중기의 범위 - 또는이 퀴즈, 오히려. 미안 해요. 나는이 때문에 우리는 이동 예정 하나의 코딩 문제를 이렇게 좋아 시간이 다되기 전에. 그리고 우리는 내가 무슨 생각을 코딩하는거야 이들의 가장 강력한입니다 예, atoi와. 그래서이에 대한 질문이었다 2 년 전 퀴즈. 그리고 여기 보드에 있습니다. 사람들은 퀴즈에했다 - 그들은 조금 더 tesxt를 부여했다 질문,하지만 난 제거 그것은 불필요 텍스트 때문에 지금 우리의 목적을 위해. 그냥 몇 가지 배경이었다 무슨 짓을 atoi와에. 하지만 모두가 알고 있습니다 매우 atoi와 잘 알고. 나는 당신이 코드를 제안 종이 한 장에. 나는 또한 당신이 전략을 사용하는 것이 좋습니다 우리는 이상 떠나면 우리의 부분에 많이. 첫째, 당신이 이해할 수 있도록 무엇 atoi와의이 일을. 그림을 그리거나 일부 마련 당신의 머리에 그것의 정신적 이미지. 다음으로,이에 대한 의사를 작성. 퀴즈에, 당신이 얻을 모든 경우 의사, 적어도 무언가를 내려 놔. 그 다음에 그 의사를 매핑 C. 당신은에 체크를 한 경우 의사와 같은 선택하면 뭔가 1, 그 경우에 매핑된다 등 조건. 그리고 마지막으로, C.에서 프로그램을 코딩 그래서 다시 atoi와에 가서 5 분 소요 한 장에이 코드를 대한 아마 용지, 당신이에 걸릴 시간의 양 코드 atoi와에 퀴즈. 다섯 15 분, 다섯 다섯, 12 10 분 거리에있는 양에 관한 것입니다 이에 대한 지출을 줄 시간 퀴즈 질문입니다. 그래서, 지금 5 분 정도 걸릴 바랍니다. 그리고 당신은 질문이있는 경우에는, 인상 당신의 손과 나는 돌아올거야. [잡담] 제이슨 허쉬 호른 : OK, 그래서 그 5 분이었다. 즉, 양의에 대해 아마이었다 시간은 당신이 퀴즈에 그 지출 것 그 시간이 아마 로우 엔드. 우리는 약간의 요점을 되풀이합니다. 우리가이 코딩을 시작하자. 그리고 우리는 모든 방법을 통해 얻지 않는 경우에, 이에 대한 답변이 퀴즈 질문을 다시 사용할 수 있습니다, 2011 년 가을이 질문 할 때입니다 퀴즈에 출연. 그리고 8 점의 가치가 있었다 퀴즈에 다음. 8 점의 하이 엔드에 포인트 무언가의 금액은 가치가있다. 보통 질문 범위이다 1-6 점. 그래서이 더 도전 확실히 질문. 나 누구를 시작 할 수 있습니까? 일반적으로, 우리는거야 이로 할 수 있습니다 논리적으로, atoi와 함수? 우리는 무엇을 하시겠습니까? 그래서 우리는 쓸거야 일부 의사. 학생 : 문자 변환 정수에. 제이슨 허쉬 호른 : 문자 변환 정수에. OK. 그래서 얼마나 많은 문자 우리는 통과해야 할 것? 학생 : 그들 모두. 학생 : 모든 문자 문자열. 제이슨 허쉬 호른 : 모든 문자열의 문자. 우리는 모든을 통해 가고 싶어 그렇다면 문자열의 문자는 것은 무엇인가 C에서 우리는 허용 된 것을 본 적이 우리는 모든을 통해 이동합니다 문자열의 문자? 학생 : 루프. 제이슨 허쉬 호른 : 루프. 그래서 우리는을 통해 루프에가는거야 의 모든 문자. 그럼 우리는 무엇을하고 싶은거야 우리가 특정 문자를받을 때? 우리는 (90)를 통과 할 거에요 말한다. 우리는 9를 얻을. 그것은 문자입니다. 우리는 함께 수행 할 작업 그 문자 9? 학생 : 문자 0에서 빼기? 학생 : 0 추가? 제이슨 허쉬 호른 : 빼기 문자 0에서 그것? 학생 : 네. 제이슨 허쉬 호른 : 왜 당신은 그렇게하고 싶어? 학생 : [청취] 값. 그 int 값. 제이슨 허쉬 호른 : OK, 그래서 우리는 수행 문자 9에서 빼기 문자 0을 얻을 수있는 실제 정수 9. 달콤한. 그리고 당신은 어떻게 그 문자를 알고 9 0을 뺀 문자 9입니까? 당신은 무엇에 차트보고 했습니까? 학생 : 구 논리적 있습니다 9와 0 사이의 장소. 아니면 ASCII 표에서 볼 수 있었다. 제이슨 허쉬 호른 : ASCII 테이블. 하지만 그래, 당신은뿐만 아니라 맞아요. 그래서 우리는 0을 뺍니다. 그래서 지금 우리는 정수 9있다. 그리고 우리는 그와 함께하고 싶어? 우리는 (90)이있는 경우에는, 제 정수의 정보 우리는 우리가 무엇을 원하는거야? 학생 : 저는 임시 정수에 넣어 것 배열, 다음에 수학을 나중에 끝으로 그것을 만들 수 있습니다. 제이슨 허쉬 호른 : OK. 학생 : 당신은 말에 시작할 수 있습니다 다음 배열 그래서 앞으로 이동 당신이 앞으로 나아갈 때마다, 당신은 10을 곱합니다. 제이슨 허쉬 호른 : OK. 즉, 꽤 같은 소리 뛰어난 아이디어. 우리는 우리의 배열의 끝에서 시작할 수 있습니다, 우리는 strleng을 사용할 수 있습니다. 우리는 여기에서 strleng을 사용할 수 있습니다. 우리는 우리의 문자열의 길이를 얻을 수 있습니다. 우리는 끝에서 시작합니다. 그리고 + 첫 번째를, 우리는 그냥 가지고 그 정수, 어쩌면 우리는 같이 작성 새로운 정수 변수까지 최고 위치 우리는 모든 것을 저장하는 중입니다. 에서의 모든 문자를 통해 우리 루프 뒤에서 앞으로, 우리는 0을 빼야하고, 우리는 그것을 가지고,과에 따라 어디, 우리는 그것을 곱 10의 힘으로. 때문에 첫 번째, 우리가 할 가장 오른쪽에있는 문자를 곱? 학생 : 0 10. 제이슨 허쉬 호른 : 0 10. 우리는 두 번째에게 무엇을 곱 않습니다 가장 오른쪽에있는 문자로? 학생 : [청취]. 제이슨 허쉬 호른 : 무엇? 학생 : 1 ~ 10. 제이슨 허쉬 호른 : 1 ~ 10. 제 오른쪽 문자? 학생 : 2 10. 제이슨 허쉬 호른 : 2 10. 학생 : 죄송합니다, 이해가 안 우리는 여기에서 무슨 일을하는지. 제이슨 허쉬 호른 : OK, 의 다음, 다시 가자. 그래서 우리가받을거야 문자열에 전달. 우리는 atoi와를 작성하고 있기 때문이다. 그래서 우리는 문자열로 전달받을. 우리가 건네지고있어 말 문자열 90. 우리가 할거야 먼저 설정한다 우리가있어 새로운 정수 변수 단지 만들 것 우리의 새로운 정수. 즉, 우리가가는 방향 마지막에 돌아갑니다. 우리는 모든 문자를 통해 갈 필요가 문자열을 우리가 결정했습니다 때문에 우리는 서로를 만질 필요가 것을 다음 우리의 새로운 정수에 추가합니다. 그러나 우리는 단지 숫자로 추가 할 수 없습니다. 우리는 단지 9을 할 수 없으며, 우리의 정수로 9를 추가합니다. 그것은 어떤 장소에 따라 달라집니다 그것은 문자열입니다. 우리는 곱 필요 해요 그것은 10의 힘으로. 그 때문에 어떻게 기본 10 작품. 그래서 우리는 실제를받을거야 문자 또는 실제 정수 숫자, 문자 0을 감산함으로써 문자 9 우리가했던 것처럼에서 에서 문자 자본을 뺀 우리는 하나에 있던 어떤 문자 그 문제. 그래서 우리는 실제로 0의 숫자를 얻을 수 있습니다 9는 실수로 저장하고, 우리는거야 따라서 10의 거듭 제곱을 곱 우리는 문자열에있는 위치에. 그리고 우리는 그것을 다시 추가거야 우리의 새로운 정수 변수에. 그래서이는 것처럼 보일 것입니다 우리는 여기에 그릴 거 야 - 수. 우리는 문자열 (90)로 전달받을 경우 -을 학생 : [청취]. 제이슨 허쉬 호른 :하지만 atoi와는 문자열을 사용합니다. 그래서 우리는 통과거야 보유. 우리는 90로 전달받을 수 있습니다. 우리는 후방으로부터 전방 간다. 우리는 0을. 학생 : 미안 해요. 어쩌면이 바보입니다. 우리는 문자열에 전달 받고 있다면, 왜 우리가 왜 왔는지 90 전달 받고? (90)은 정수이기 때문에. 제이슨 허쉬 호른 : atoi와는 걸리기 때문에 문자열과 정수로 변환합니다 해당 문자열의 표현입니다. 그러나 문자열 (90)는 정수가 90 수 90. 문자열 (90)는 두 가지의 배열 또는이다 세 문자 오히려 구 문자, 0 문자 및 백 슬래시 0 문자. 그리고 우리는 때문에,에 atoi와를 작성하는 예를 들어, 당신은 명령을 수행 할 때 행 인수, 그것은 저장 것 ARGV, 그것은 문자열로 저장 있어요. 하지만 당신은 숫자로 취급하려는 경우, 는로 변환 할 필요 실제 정수입니다. 어떤 우리가 우리의 문제 세트 중 하나를했다. 우리는 다수 않았다 우리의 문제 세트. 정수를했다 모두 명령 줄 인수로. 그래서 그 이유는 우리의 atoi와 기능 문자열을 사용합니다. 그래서 다시, 여기에 우리의 예제에서, 우리는거야 마지막 하나를 것. 우리는 문자를 뺄거​​야 그것에서 공 때문에 문자 0 문자 0 뺀 ​​당신에게 제공 에 따라 실제 숫자 0, 우리가 ASCII 수학. 문자로 표현되어 있기 때문에 실제와는 다른 - 문자, 예를 들면, 소문자 a는 97입니다. 그것은 아니에요 - 죄송합니다! 그것은 당신이 기대하는대로 아니다 그것은 예를 들어, 0이 될 수 있습니다. 그래서 당신은 빼기해야 문자 0을 얻을 수 있습니다. 그래서 우리는 여기에서 그렇게 할거야 실제 수를 얻을 수 있습니다. 그리고 우리를 곱 예정 10의 힘은 어디에 따라 문자열에, 그리고 그 다음을 우리의 자리 표시 자에 추가 변수 그래서 우리는 가지고 올 수 우리의 마지막 새로운 정수입니다. 즉, 모든 사람에게 의미가 있습니까? 그래서 우리는이 코드를하지 않을거야 지금 때문에 우린 짧은 시간에 얻는. 그 타이밍을 드려 죄송합니다. 그러나 이것은 무엇을, 희망, 당신은 것입니다 에 - 퀴즈에 할 수있을 적어도,이 의사를 얻을 수 기입. 그리고, 우리가 인 경우에 작성 의사는, 실제로, 우리는이 작업을 수행 할 수 꽤 빨리. 우리는 우리가 쓴 댓글의 각 행 여기에 약으로 변환 C 코드 한 줄. 새 변수, 쓰기를 선언 루프, 일부 뺄셈, 일​​부 곱셈, 일부 할당. 우리는 또한 아마 싶어 리턴 라인을 작성합니다. 우리는 또한 넣어 할 수 있습니다 여기에 몇 가지를 확인합니다. 그래. 학생 : 그래서 우리가 처리 할 수 실제 문자열의? 내가 알고 있기 때문에 그냥 주소입니다. 마찬가지로, 당신은 어떻게 길이를 얻을 것 문자열을 통해 전달되는? 제이슨 허쉬 호른 : 어떻게 한 문자열의 길이? 나 strlen. 학생 : 나 strlen, 그래. 하지만 당신은 같이의를 둘 수있다 그에 대한 인수? 제이슨 허쉬 호른 : 그래서 나 strlen 문자 스타 걸립니다. 그리고 그 문자 스타를 따라하고, 가에 도달 할 때까지 카운트를 계속합니다 백 슬래시 0. strlen 함수는 사실은 다른 프로그램 중 하나 우리 코드에 가고 있었다. 즉, 코드에 대한 또 다른 좋은 하나입니다. 그 하나는, 조금 쉽게하는 경우 때문에 당신은 그것에 대해 생각하는거야 개념적으로 - 난 그냥 큰소리로 말하지 - strlen 함수는 다음과 포인터 및 유지 가서 계산 때까지를 추적 백 슬래시 0에 도달합니다. 학생 : OK, 그것을 얻었다. 제이슨 허쉬 호른 : 너무 최고 퀴즈 0 내일에 행운. 당신은 질문이있는 경우에는, 나는거야 이 후 외부합니다. 나에게 이메일을 보내 주시기 바랍니다. 당신이 경우에 당신의 자신의 TF에 다가 내 섹션에서, 또는하지 내 당신이 그것을 원하는 경우 이메일을 보내십시오. 당신은 놀라게하고 싶지 그냥 보내는 경우 나 이메일, freakout 이메일, 나는거야 , 웃는 얼굴처럼, 당신을 다시 보내 나 같은, 농담이나 뭐. 그래서뿐만 아니라 그렇게 할 주시기 바랍니다. 행운을 빌어 다시, 나는거야 모두 다음 주를 참조하십시오.