[Powered by Google Translate] [주 2, 계속] [데이비드 J. Malan, 하버드 대학교] [이 CS50입니다. - CS50.TV] 괜찮아요. 이 CS50이며,이 2 주간의 끝입니다. 당신은이 시간 주변에 내일 배 고플이 예상되는 경우 우리가 소그룹 내일, 목요일, 오후 1시 15분로 소집 할거야 알고. 당신은 답장하려면이 URL가 있어요. 공간이 제한되어 있으므로, 양식이 양식을 작성하는 시간으로 채워 경우 용서하시기 바랍니다. 관심있을 또 다른 URL,하지만이 있습니다. 단 한 달의 시간에 대한 년, 과정은 사용할 수 것입니다 모든 더 넓게 edX을 통해,이를 통해 인터넷에서 사람들이 함께 따라 할 수 있습니다 사실, 매우 적극적으로 수업에 참여. 그들은 토론 CS50 어플라이언스와 CS50를 사용합니다 우리는 이미이 학기을 사용하고있는 다양한 소프트웨어 도구의 대부분. 그리고 우리가 올해 실험로 수행 할 사업 중 하나 우리가 번역 할 수 있습니다 얼마나 많은 콘텐츠 표시하는 것입니다 다른 음성 및 서면 언어로. 이 프로젝트에 참여에 관심이있을 수면 우리는이 과정의 강의 영어 성적 증명서 및 자막을 제공 할 것입니다된다 와 반바지, 세미나 및 섹션과 같은 당신은 유창하게 말하거나, 유창하게 다른 언어를 작성하는 경우 이 동영상 중 하나 이상에서 수행된다 우리는이 프로젝트에 참여를 유도 싶어요 당신은 아주 잘 알고있는 언어로 그들을 번역. 당신에게 인터페이스의 의미를 제공하기 위해이 웹 기반 사용자 인터페이스가 우리는 본질적으로 같은 UI를 만들 것이다 사용한다는 점을 잊지 마십시오. 이건 내가 어떤 할로윈 전 교수 였는데 이러한 시간 기록 옆에 검은 색에 가장 오른쪽에, 당신은 그 날 내 입에서 나온 여러 가지를 볼 수 있습니다 다음 아래는 다른 언어로 번역 할 수 있습니다 매핑이이 경우에, 사이 정확히, 영어와는 스페인어를 말한다. 그래서 실제로 매우 사용자 친화적 인 도구입니다. 당신은 키보드 단축키로 매우 쉽게 빨리 감기 되감기 할 수 있습니다. 이 실험에 참여하고 있고하고자한다면 당신의 말은 본적이 읽고 거기에 사람들의 잠재적 수천 참가하여 주시기 바랍니다. 월요일부터 새끼 고양이에 대한 한 마디. 우리가 너무 무서운 메시지를 전송했습니다 않도록, 사무실 시간 제안으로, 그 실현해야 섹션 제안대로, 코스의 설계는 매우이다 학생들은 문제 세트를 통해 협력하고 일을 이야기합니다, 함께 문제, 그리고 정말 선이 그냥 내려 오는 다시, 당신이 궁극적으로 제출 한 작품이 곧 자신이 될 것입니다. 그리고 아주 솔직히, 근무 시간에 그건 완전히 정상입니다 그것은 완전히 당신 옆에 어떤 친구와 채팅을 할, 심지어 예상 할 수있는 일이야. 그 또는 그녀가 어떤 주제에 어려움을 겪고 있으며, 당신은 같은 경우 "오, 그래, 당신에게 제가 쓴 코드의 일부 라인의 단면을달라고"그건 괜찮아요 그런 일이, 그리고 그 학습의 과정, 제 생각 많이 유도. 머리가 너무 많이 초 동안 여기 종류의 기울어 끝나면 어디 선이 교차됩니다 것은 또는 정말을위한 시간은 방금 당신의 친구를 차단 해제 기회됐다 니 그리고 확실히 물건은 이메일 보관 및 같은을 통해 교환받을 때 너무 라인이 있습니다. 이 모든 방법으로 편안하게 친구들과 채팅 없길 바랍니다 그리고 psets 등에 관한 불과 반 친구들은 궁극적으로 제출 한 것을 걸 깨닫게 정말 당신의 창조가 아닌 다른 사람의 제품이어야합니다. pset2에 대한 도메인 별 문제 그리고 하나 내일은 늦게 밤에 와서됩니다, 암호의 세계에 뛰어들입니다 어떤 정보를 암호화하거나 출격의 예술이다 이 궁극적으로 보안의 세계에 관한 것이다. 이제 우리의 대부분에 대한 보안은 매우 평범한 메커니즘의 형태로 제공됩니다. 우리 모두는, 사용자 이름 및 비밀번호를 그리고 우리 모두는 대부분 아주 나쁜 사용자 이름과 비밀번호가 있습니다. 비밀번호가 여러 웹 사이트에 동일한 경우, 아마도 가장 좋은 생각은 아니 네요 우리는 학기 끝으로 논의겠습니다. 농담 - - 비밀번호가 스티커 메모에 기록되어있는 경우 모니터에, 너무 반드시 최고의 디자인이지만 꽤 일반적인 현상이 아닙니다. 그리고 귀하의 비밀번호를 암호화 할 암호를 사용하지 않는 경우 그들은 특히 취약합니다. 당신이 숨겨진 Word 문서함으로써 영리 슈퍼 인 것 같아요면 어디 선가 하드 드라이브에 그 암호를 모두 가지고 하지만 아무도 그것도 아주 보안 메커니즘은 아닐지라도,에서 찾아 갈 수 없어하는 폴더에 있습니다. 그리고 무엇 pset2이 소개하는 암호화의 예술이다 암호 같은 일들이 모두 더 안전 있도록 및 정보를 출격. 여기 문맥입니다 안전하지 않은 데이터가있는 를 암호화하고이를 교란시키는 기회를 제공합니다. 그리고이 예를 들어, 암호화 된 메시지의 예입니다. 이와 같은 사실은 실제로 영어로 무언가를 말하고 있지만 그것이 전적으로 분명 아닙니다. 그리고 우리는 여기에 비밀 메시지가 무엇인지 떨어져 감히 지금이 눈앞에 있습니다. 사람들이 영어 문구로되어 있습니다 그러나 컴퓨터의 현실 세계에서, 일조차 보이지 않네요. 예를 들어, 여러분이 표준 Linux 또는 Mac 또는 UNIX 컴퓨터에서 찾을 수 있습니다 무엇 시간이 암호 파일이라는시 파일에 그 한 번이었다. 오늘날 다른 곳으로 이동되었습니다있어. 당신이 시스템에서 올바른 위치에 보면하지만, 당신은 사용자 이름뿐만 아니라이 표시됩니다 또는 시스템에 다른 사람의,하지만 당신은 자신의 암호의 암호화 된 버전을 볼 수 있습니다. 사실,이 단어 토굴은 다음과 같은 콘텐츠가 암호화하는 것이 좋습니다 이 임의 문자와 문자와 숫자의 일련 등등 만 일반적으로 몇 가지 비밀을 알게하여 해독 할 수 있습니다 - 비밀 단어 비밀 번호 - 그리고 실제로, 암호화 궁극적으로 종기를의 예술은 일종의 신뢰하는 그리고 다른 사람이하지 않는 일을 알고. 그래서 우리는 오늘 좀 더 자세히이 탐구되고 pset에 와서. 그리고 지금 통과 / 실패에 단어. 여러분 중 몇몇은 pset1, 어플라이언스로 다이빙 한 특히 그리고 자기 자신이 매우 새로운 세계는 걸 그 좌절감과 혼란 불과 기술적 인 문제는 매우 예상 할 수 있으며, 특히 너무 많은 새로운이 첫 번째 pset과, 단지 있나요 및 CD에 익숙 받고 모든 마법 명령 그리고 새로운 환경, 그리고 그 실제 자료와 자체 프로그래밍에서 별도입니다. 따라서 지원 구조로 존재 근무 시간은 확실히 있다는 것을 너무 알고 있습니다. 절에서는이 오는 일요일 시작합니다. 가장 중요한 것은, 당신이 당신을 위해 세계가 못 돼서 기분이 경우, 정말 단지 시간이 걸릴 않습니다 알고 있습니다. 그리고, 실패 / 클래스 패스를 계획하고 나를 위해 년 전에이 기회가 아니었다 솔직히 말해서, 나는 교실에서 발을 설정하지가 못했어요. 그리고 당신은, 때까지이을 변경 말 코스의 다섯 번째 월요일 수 지금의 가장자리에 있다면, 모두 알고 있습니다보다 머리 다른 물로, 확실히 그냥 통과 / 실패 변경해 않습니다. 다시 일을 계획하고 하버드에있는 여기 정말이 문화가없는 패스 / 실패 모두가 정말을 달성하거나 overachieve하고자부터 솔직히이 밖에 무언가를 시도하는 좋은 방법입니다 ,, 꽤 좋은 당신에게 익숙하지 않을 수 있습니다, 당신은 대부분의 경우에 일을 끝낼께요 귀하의 깜짝 선물 아마도 많이. 그리고 더 구체적인 용어로, 전 않습니다 일반적으로 실패 / 통과 생각 당신이 pset0 경험했을 수도 특히, 당신은 어떤 pset에 10 시간, 15시간, 25 시간 넣어 경우 그리고 당신은 벽에 머리를 흔들며하고 있으며 늦은 밤 슈퍼 점점 하지만 방법의 pset 90 %를 찍은 그리고 당신은 한 가지를 이해 할수 정말이 같은 클래스의 가장자리를 벗고 실패 / 통과, 당신은 행복하게, 좋아, 난이 완벽하지 알아 "라고의를 정렬 할 수있는 하지만이 문제에 엉덩이 일, 나는 "그게 어디로 갔는지와 매우 행복하다 그 패스가에 대한 기대에 부응 / 실패합니다. 따라서 염두에두고 않습니다. 괜찮아요. 하버드 대학교 (Harvard University) Wi-Fi 접속 설비를 사용하기 위해 노력 한 분들 자, 주위에 떠 CS50 SSID, Wi-Fi 인터넷 접속이있는 걸 알아 당신은 더 좋은 행운이있을 것을. 조금 아이러니 당신이에 연결을 시도하고 싶은 경우에 대한 비밀번호, 그리고 더 낫지 않을 경우 저희에게 알려 - - 더 나은 속도를 위해 12345, 모든 방법은 최대 8까지입니다 8 5보다 더 안전 때문입니다. 당신은 Wi-Fi 인터넷 접속 암호를 필요하면,,, 무선 여기 CS50에 12,345,678 연결 그래도 간헐적 연결 문제가있는 경우와 CS50에 게시물이 토론 우리는이 공간에 대해 알 수 힘을 알려드립니다. 괜찮아요. 특히 모든 것을 애플의 팬 소년 또는 소녀 분들을위한 그래서 빠른 맛보기. 내가 다시 몇 년에서 파는 것은 여기 iUnlock.c이 파일을했다 그냥 가지 더 구체적이고 더 복잡하게하는 우리가 만들고있어 더 기본적인 C 프로그램의 일부. 그래서 iUnlock.c이 파일을 열었습니다. 오늘의 강의 페이지에서 사용할 수 있습니다. 왼쪽 측면에서이 기능의 긴 목록을 참조하십시오. 따라서이 책을 쓴 동료는 주요보다 더 많은 기능을 많이, 잘 썼다. 그는 여기 도서관의 전체 무리를 사용하여, 우리는을 통해 스크롤을 시작하면, 어떤이 실제로하는 것은 원래 아이폰에 대한 매우 먼저 저는 믿습니다, 균열입니다. 당신이 원래 아이폰을 본때를 보여 싶었을 때, 어느 AT & T에서 untether을 의미합니다 실제로, 거기에 특별한 소프트웨어를 설치하고 애플은 사람들이하고 싶어하지 않은 일을 누군가가, 그들은 소프트웨어 결함을 악용 할 수 있습니다 정확히 어떻게 한건지 할 수있는 시간이 걸렸습니다 따라서 애플 소프트웨어의 실수, 버그, 그리고이 태어난 iUnlock.c .. - 당신이 컴퓨터에 컴파일하고 아이폰에 설치하는 경우 그는 USB 케이블, 말을 통해 컴퓨터에 연결되었습니다 이 귀하의 아이폰에 대한 관리자 또는 루트 권한을 줄 거라 그리고 거의 당신이 원하는대로하도록 내버려. 그리고이 매력적인 고양이와 마우스 게임가있는 것 같은데 애플 특히 세계의 나머지 사람들과 같은 사이 많은 기업처럼, 만 그들이 의도 뭘 할 수 있도록 자신의 물건을 봉쇄하려고합니다. 하지만 이런 사람과 낮은 수준의 세부 사항의 이해 덕분에 - 이 경우 C 프로그래밍 - 그리고 익숙한 구조의 많은 우리가 게임을 시작 한, 당신이 실제로 하드웨어를 활용 할 수 있습니다 방식으로 당신은 적합 및 일부 법인 일 필요는 없습니다 참조하십시오. 따라서 예를 들어, 난이 무엇을하고 있는지 몰라 하지만 GetVersion은 매우 간단 소리 이이 사람이 쓴 기능입니다 것처럼 보인다. 그것은 인자로 정수의 어떤 필요, 아무 것도 반환하지 않습니다 하지만 여기서 루프와 경우 조건, 조건을 어기면과 루프에 나타납니다 우리가 아래로 스크롤하면 그리고 어떻게 된 일인지 버전 번호에 관한 이러한 키워드의 많은 새로운 될 것이다에도 마찬가지입니다. 그리고 우리가 본 적이 있사 볼 수 있습니다 여기에 함수의 전체 많아 학기의 과정 동안. 하루의 끝에서, 우리가 지금까지 장난 한 것과 동일한 규칙과 논리를 따른다. 그래서, 당신 아이폰 3S로 나 4S 나 곧 95이 일을 해독하기까지 너무 오래되었습니다 하지만이 대단히 우리가로 다이빙 한이 세상에서 파생 있다는 알아요. 의 좀 더 간단한 예를 살펴 보자 : 이 사진은, 그냥 구문 예열을 이용하고 일부 다른 데이터 형식 우리는 얘기를했지만 정말 C.에서 볼하지 않은 이 positive1.c라는 파일이며, 상단의 의견에 따라, 이 단지 사용자가 양수를 제공하는 요구합니다. 따라서 사용자 대화 형 프로그램 좋다 DO-동안 루프의 예를 들어 당신이 뭔가를 할 사용자를 말할 필요가있는 곳, 그리고 그들은 당신이 그들을 소리 또는 입력을 거부 협조하지 않으면. 점에서 사례 : I 24를 통해 라인에게 19을 갈거야 너무 오래 같이 사용자 나에게 긍정적 인 번호를 부여하지 않았습니다. 라인 18 여기이 세부, 왜이 전체 반복 구조 위의 n을 선언 않았습니다 로 오른쪽 라인 22 옆에 난 사실 N를 얻을 관심 장소로 반대? 그래. [학생] 범위입니다. >> 네, 범위가 너무이 문제. 그리고 시민들의 관점에서, 범위에 무엇을 참조합니까? 그래. >> [안 들리게 학생 응답] >> 당신은 크게 조금 말할 수 있습니까? [학생] 해당 변수에 액세스 할 수 있습니다 곳. >> 좋아요. 당신이 특정 변수에 액세스 할 수 있습니다 곳. 그리고 일반적으로 엄지의 규칙은 지금까지 왔습니다 그 몇 가지 변수의 범위 당신이 본 한 가장 최근의 중괄호에 의해 정의됩니다. I 줄 22 n을 선언하는 실수를 한 경우 그리고이 경우에, 그 라인 일 것이다. , 난 정수를 것, 그리고 라인 22에서 해당 변수 N에 넣어 것입니다 하지만 어떤 코드의 라인은 지금 무슨 말을하는지 모를까요? >> [학생] 25. [Malan] 25,이 경우는 중괄호 외부 내리는 때문에뿐 24 밝혀졌다. 그래서 아주 쉽게 간단하게 변수를 선언하여 그냥 좀 성가신의 비트 만 해결 기능 자체의 외부. 우리는 당신이 한 단계 더 갈 수 오늘 나중에 볼 수 있습니다 당신은 조금이라도 게으른 얻을 수 있습니다. 그리고이 일반적으로 권장 할 수 없습니다,하지만 당신이 게으른 얻을 수 해야하고, 루프의 내부, 함수의 내부는 안 말하자면, 전 세계적으로 변수를 넣어 I 줄 15 여기처럼하지만 파일 자체에, 모든 기능 이외에 당신이 작성했습니다. 이것은 일반적으로,시 찌푸리게하지만, 이렇게하는 경우에 종종 다른 문제에 대한 솔루션입니다 사실입니다 우리는 결국 볼 수 있습니다. 그럼 지금부터 우리는이처럼 갈거야,하지만 우리가 다시 작성할 수 있는지 확인합시다 단지 다른 우리 조금을 표현 시작합니다. 이 프로그램은, 그냥 명확하게하기 위해, positive1입니다. 내가 여기서 가서 내 터미널 창에 입력 positive1을 보자. 괜찮 컴파일됩니다. 나는 Enter 키를, positive1을 실행하는거야. 난 당신이 나에게 양의 정수를주는 요구합니다. 나는 -1 말합니다. 그건 작동하지 않았다. 0, 99. 그런 일 것 같습니다. 아닐지도 가장 엄격한 테스트,하지만 적어도 그것은 좋은 정신 검사입니다 우리가 오른쪽 궤도에 있다고. 그래서 지금, 내가 가서이의 버전 2를 열어 이미 다른 무엇입니까? 이 같은 일을 구현,하지만 분명히 다른이 시간을 얻을 수있어? 녹색이 BOOL. 그것은 녹색, 데이터 유형 BOOL로 알려진이 키워드에 강조 표시됩니다. 그것은 C.의 모든 버전에 내장 된 오지 않아 당신은 특정 라이브러리를 포함해야합니다. 우리가 BOOL에 액세스 할 수 있도록 우리의 경우에는, 나는 CS50 라이브러리를 포함되어 있습니다. 그러나 라인 18에, 우리는 감사 불리는 Boolean 값을 갖고있는 것 같다. 이 아무 것도 신고 할 수도 있지만, 나는 감사라는 단지 종류의 몇 가지 의미 의미를 전달합니다. 그래서 처음에 라인 18, 나는 분명히 감사가 아니야 감사 부울 값은 한 줄에 18에 false로 초기화되기 때문입니다. 그리고 그것이 내가 23을 통해 라인 (21)에 여기에 무슨 짓을했는지 보인다 그냥 가지 내 논리를 재 작성 한합니다. 더 기능적으로 서로 다른 그래서 INT는 사용자가 제공 한 경우하지만, 라인 (22)에 지금은 확인 0보다 큰, 그럼 간단하게 true로 감사의 값을 변경합니다. 그리고 왜 그런 짓을합니까? 라인 25 때문에, 확실히 나는 병을 확인하는거야. 감사가 거짓 인 동안이 루프를 수행합니다. 그래서 버전 1에 대한 대안으로 제안 가 아마 적어도 좀 더 직관적이기 때문에, 좀 더 영어​​에 근거입니다. 감사가 거짓 인 동안 감사하지 또는면서 다음을 수행하십시오. 그리고 이번에는 너무 내가 외관상 사용자가 입력 기억 상관 없어요 통지하기 때문에이 아무런 변수 N, 그래서 사실은, 약간의 흰 거짓말은 없습니다. 우리는 그것의 하단에 도착하면 기능적으로, 프로그램은 약간 다릅니다 나는 여기서 n은 무엇 기억 안 때문입니다. 하지만 여기에 보여주고 싶었도 우리는 GetInt을 본 적이하더라도 과의 오른쪽에 사용되는 GetString 지금까지 등호 우리가 엄격하게 필요가 없습니다 값 기술적를 기억. 만약 그냥 값을 저장 상관 없어 어떤 이유를 들어, 당신은, 우리가 단순히 GetInt으로 쓸 수 있다는 것을,이 값을 확인하려면 열린 괄호 가까이 괄호. 우리가 말한 적으로 그 함수는 값을 반환하는 것이다. 이 정수 당신을 돌려 줄거야. 그리고 당신은 정신적, 이런 일이 있었는지 생각하면 나는 99에 입력 할 때, GetInt은 숫자 99를 반환 그래서 개념, 내 코드가 실제로 있었다 것처럼입니다. 99이 0보다 실제로 더 크다면 다음 감사 사실이되고, 지금 감사이기 때문에 다음 줄에 25 우 실현, 우리는 끝났어, 및 라인 (26)에서, 우리는 단순히 '긍정적 인 정수에 대한 감사합니다 "라고 이 할 일 뭐든간에. 지금 말하자면, 여기 약간의 구문 설탕을 해보자 구. 우리가 positive3이 세 번째와 최종 변종이 줄 25 청소 수 있는지 봅시다. 지금 어떤 코드의 라인 만 차이가? >> [학생] 25. >> [Malan] 네, 25. 그리고 우리는 아직이 트릭을 보지 못했지만, 우리는 월요일에 느낌표를 봤어요 이는 무엇을 나타냅니다? >> [학생] 없습니다. >> 못하거나 부정. 그래서 Boolean 값을 가지고 값을 플립. 참 거짓되고, 거짓 사실이된다. 이 그래서, 내가 제안 것이라고 코드를 작성도 좀 더 직관적 인 방법입니다 난 아직 false로 감사 초기화하기 때문에, 난 여전히 다음을 수행 그 때가되면 나는 true로 감사 설정 하지만 지금은 정말 그냥 구두로 왼쪽에서 오른쪽으로이 코드를 번역 할 수 있습니다 동안 (감사!), 탕이나 감탄 점은,하지의 개념을 나타냅니다 때문에 그래서 감사하지 동안. 그럼 다시, 우리는 본질적으로 다른 새로운 개념을 도입하지 않았습니다. 우리가 스크래치와 함께 연주 할 때 우리는 다시 논리에 대해 얘기 하지만 우리가 여러 가지 방법으로 우리의 코드를 작성할 수 지금 알고 있습니다. 따라서 특히 pset1에 당신이 어떤 프로그램을 작성하는 방법을 알아 내려고 애 쓰고 일종의 경우 솔루션의 숫자가있을 수 있기 때문에 확률은 당신이 운이 아르 당신은에 일어날 수 있는지 확인하십시오. 예를 들어,이 프로그램의도 간단한에 불과 3입니다. 괜찮아요. 그리고 지금 월요일에 우리가 반환 값이 메모에 남아 기억합니다. 그래서 처음으로 우리가 주이없는 프로그램을 작성, 또한 여기 쓴 자신의 사용자 지정 기능이 있습니다. 그러니까 줄 31에서 34을 통해 나는 큐브 기능을 구현했습니다. 그것은 복잡한 없습니다. 단지 * A * 이번 케이스는 아니군요. 하지만 그런 일에 대해 중요한 것은 내가의 형태로 입력을 데려 갈 것입니다 나는 * A *의 형태로 출력을 돌아가는거야. 그래서 지금 제가있는 능력을 가지고 정도는 나도 prinf 혼자에 익숙해 같은, 큐브 함수를 호출하여이 함수를 호출합니다. 그리고 큐브 기능은 일부 입력을 차지하며 큐브 기능은 일부 출력을 반환합니다. 대조적으로, printf는 짓을 했어. 옆으로는 값을 반환 않는다하더라도 그것은 우리가 아끼던 아무 값도 반환하지 않았습니다; 당신은 일반적으로 그것을 무시합니다. Printf 뭔가 했어요. 이 화면에 인쇄의 부작용했다. 여기에 대조적으로, 우리는 실제로 무언가를 반환하는 큐브 기능을 갖추고 있습니다. 그래서 익숙한 사람들을 위해, 그것은 매우 간단 좋습니다. 그러나 입력을 전달하고 출력을 다시 가봐야의 생각과 덜 익숙한 사람들을 위해, 그냥 뭔가 슈퍼 간단한 해보자. 편안한 사람이 간략하게 무대에 올 수 있을까요? 당신은뿐만 아니라 당신에게 카메라로 편안하게해야합니다. 응? 좋아요. 이름이 무엇입니까? >> [학생] 켄. >> 켄. 괜찮아요. 켄, 일어에 있습니다. 켄 여기 종류의 함수가 될 것입니다. 가 진행이 짓을 보자. 의 조금 고급을 보자. 만나서 반가워요. 중앙 무대에 오신 것을 환영합니다. 괜찮아요. - 여기서이 버튼을 눌러 보자. 괜찮아요. 그래서 여기 당신이 현대적인 칠판을 가지고 그리고 내가하면, 예를 들어, 기본 기능입니다 그리고 내 손에 아이 패드가 없습니다. 음, 난 그렇게 할 수 없습니다 - 정말하는 방법을 기억하지 않습니다. 정말 좋은 필기가 없습니다 그래서 따라서 당신이 내게 화면에 뭔가를 인쇄하고 싶습니다. 나는 주 프로그램 당하고 있어요, 그리고 당신이이 말을하지 않을 수 없네요 내 글자에 작성하고 당신에게 의견을 전달하여. 이 운동은하지만 바보, 함수의 개념과 함수를 호출 이에 기능 정말 종기를 반환. 나는 주이고, 난 그냥 화면에 printf, 견적 - 인용을 끝 맺다 뭔가를 작성했습니다 나는이 프로그램을 실행하고 있으며, 빠른 시일 printf라는됩니다 그것은 하나의 인수 또는 큰 따옴표 사이에 가끔 매개 변수를 걸립니다. 여기 인수입니다. 나는 켄에 통과거야. 그는 몇 년 몇 수 전에 서면 블랙 박스입니다 그건 분명에만 화면에 물건을 인쇄하는 방법을 알고 있습니다. 그럼 실행합니다. 그건 나쁘지 않아. 아주 좋아. 이제 켄이 실행 이루어집니다. 그가 나에게 뭔가를 다시 건네해야합니까? 우리는 지금까지 없었습니다. 다시 말하지만, printf 실제로 숫자를 반환 않지만, 이제 그 방법을 무시하는 것 우리가 사용한 적이 때문입니다. 따라서 켄하기에 그입니다. 그리고 이제 주 다시 프로그램의 제어 인수 코드의 라인은, printf, 실행 완료되기 때문입니다. 그리고 우리는 다른 줄이 무엇이든 수행 할 때, 우리의 방법에 대해 이동합니다. 그래서 지금의이 약간 다른 예를 봅시다. 이 시간 여기가 먼저 화면을 깨끗하게,이 시간 우리는 cubing 기능을 할거야 하지만 이번에는, 내가 출력 값을 기대합니다. 그러니 어서 가서 해주세요. 지금은 x는 x의 큐브를 얻을 수 있다고 코드 줄 수 있습니다. 코드의 라인, 리콜은 다음과 같습니다 X = 큐브 (X); 그럼이 성공 할까? 가 가서 다시 당신에게 흰색 화면을 줘 보자. 난 지금 X의 값을 적어 갈거야 이 순간에 할 일이있는가 간단하게하기 위해,의 말 2 보자. 나는 종이 제 값을 x입니다 (2)의 값에 쓰여지 있습니다. 나는 켄에게 넘겨. >> 그리고 난 답을 만드는가? >> 네, 그냥 답을 작성하게. 좋아요. 그리고 지금 그가 나에게 뭔가를 반환 할 수 있습니다. 좋아요. 맘에 멋지네요. 이제 그는이 경우에 8의 가치를 돌려 손이며 어떤 역할을합니까? 실제로 -이 권리를 얻을 보자. 내가 그걸로 뭘해야하지? 지금은이 값을 가지고 실제로 메모리에있는 동일한 비트에 저장하는거야. 하지만 여기에 어려움을 겪고있는 것 같아요납니다. 어디 실제로 X의 값을 쓸 않기 때문에, 조금 혼란스러워 내가 방금 한 것은 물리적으로 손 켄 값 2를 가지고 종이이기 때문에 이는 X이었고, 실제로 그 무슨 일이 일어 났는지 정확하게. 그래서 당신이 함수를 호출하고 때 인수에 전달하는 판명 안녕하세요 같은 세상이 아니면, 2처럼 인수에 전달 일반적으로, 당신은 그 논쟁의 사본을 전달하고 있습니다. 그래서 난 여기 숫자 2를 썼다와 켄에게 넘겨 것처럼 그건 내가 아직도 어딘가에서 값 2의 사본이 있다는 뜻한다 실제로, 지금은 값이 8 다시이라도 한 건 당신이 RAM에 다시 가야하기 때문에 내가 한때 숫자 2를 한 곳에서 실제로 8 적어 둡니다. 따라서 시각적으로, 말 그대로의 값의 복사본을 전달하는이 개념을 기억 해요. 이 경우에 8과 같은 값을 - - 켄은 그의 문제는, 뭔가를 내게 건네 않습니다 내가 주위를 유지하려는 경우 그럼 내가 그 값에 뭔가 의미있는 일을하고 있습니다. 그래서이 모든 긴 전에 모든 너무 익숙 다시 올 것이다. 여기이 데모에 대한 많은 켄 감사합니다. [박수] 아주 잘 했어요. 궁극적으로 우리가했던 짓 전화 기능의 일부에 관한 그 방법을 알아 보자. 내가 가서 여기 cubing 예를 다시 되돌려 보자. 공지 사항 우리가 실제로 더가 나타나기 시작하려는 경우 즉, 우리는 숫자 x가 여기에 전달되는 건 사실주의해야 할거야 실제로 함수에 전달되는 일을 다릅니다. 그러니 다시 복사하여이 패스는 순간에 매우 밀접한 관계가있는이 될 것입니다. 의이 잘못된 아직 작동하지 않는 것을 살펴 보자. 나는 가서 자연에 결함이 삼분의 일 버그 예를 열거야 그리고 그것은 buggy3 전화는 교환 기능을 구현있어. 여기 x와 y는 임의의 각각 1과 2로 초기화 된 주요 기능을 갖추고 있습니다. 우리는 GetInt를 사용할 수 있지만, 우리는 간단한 운동이 필요합니다 그래서 1과 2와 같은 하드 코딩입니다. 라인 21 및 22에서, 우리는 분명히 x와 y, 한 줄에 1을 출력하면된다. 그런 다음 줄 23 일, 나는, 점, 점, 점을 이러한 값을 교환있어 주장한다. 내가 외관상 라인의 기능 2 인수를 24이라고 스왑 전화하십시오. 기능이 인수를 사용하는 것이 완전히 정당한 겁니다. 우리는 printf 이미 그렇게 봤어요. 따라서, 스왑 무리가 x와 y를 차지하며 이름이 있듯이 나는이 두 값을 교환거야 희망합니다. 그래서 저는 25 "교체!"행에 대한 소유권을 주장 그래서 x와 y를 다시 인쇄 그들이 실제로 교체 된 것으로 가정하에. 하지만 실제로이 프로그램을 실행하는 경우 - 나 터미널 창을 열어 보자 저 buggy3을 보자 - 이름에서 알 수 있듯이,이 일은 좋게 끝나지 않을 것이다 내 말은, 입력 x는 1 것을 확인할를 쳤을 때 y는 2이기 때문에 아직 프로그램의 끝에, 그들은 실제로는 여전히 동일합니다. 그럼 지금 켄과 함께, 무슨 실제로 무슨 일 시범에 따라? 이 스왑 함수에 다이빙합시다. 이 짧은 됐네요. 단지 긴 코드 몇 줄입니다. 그러나 켄과 여기에 말한 간단한 이야기​​를 바탕으로 근본적인 문제가 뭐죠? 왜 스왑이 고장이야? [학생] 당신은 사본이 아닌 변수에 저장하고 있습니다. 그렇지. 우리는 변수, 사본 자체를하지 저장하고 있습니다. 즉, 스왑 분명히 2 인자, 정수를 필요 하고 자의적으로, a와 b라는 그리고 여기까지 나는 각각 1과 2아르 x와 y,에 통과 한 하지만 그대로 X를 전달 하는게 아니라, 말 그대로, y에 전달 없어요 나는 X의 사본와 y의 복사본을 통과거야. 그것은 거의 것처럼 당신은 복사 및 스왑에 붙여 넣을거야 당신이 실제로 조작 할 값입니다. 그 경우, 나는이 프로그램 시작 줄을 실행 35 36 이예요면 나는 그 이야기의이 시점에서, 선 37 때, 어떻게의 가치인가? 이야기의이 시점에서, 선 37,이 시점에서의 값이 무엇입니까? >> [학생] 1. [Malan] x가 첫 번째 인수로 전달 되었기 때문에, 그냥, 오른쪽, 1이어야합니다, 이 기능은 임의의 첫 번째 인수를 호출합니다. 마찬가지로 두 번째 인수를 Y 있으며, 단지 임의의 두 번째 인자 B를 부르고있어. 이 이분법은 실제로 매우 간단하게 설명되어 있습니다. 잘 생각해보세요. 우리는 모두, printf 쓴 사람을 만난 적이있다 그래서 반드시, 그 또는 그녀는 우리의 변수를 30 년 후에 호출하려고 아무 생각이 없습니다. 그러니 당신 작성할 함수의 변수라고 부릅니다 구분이있을 그리고 당신은 전화 또는 사용하는 함수의 변수라고 부릅니다. 다시 말해, 난 x와 y로 내 변수를 작성했습니다 다른 사람이 스왑 기능을 작성했는데 있다면, 그 또는 그녀는 확실히 모르겠 는데요 내 변수는 호출 할 건데 그래서 이름이 이중성을 가지고 왜인지 알고 있습니다. 기술적으로, 난 우연의 일치하여이 작업을 수행 할 수 하지만 아직도 사본로 전달 될 것입니다. 이건 그냥 순수한 우연의 일치 될 심미적 경우 스왑을 쓴 사람 같은 이름을 사용했다. 따라서 이야기의이 시점에서, 선 37,은 1 번, B는 2, 이제 내가 그들을 교체로 진행합니다. 우선, 제가 실제로 훨씬 더 간단 해주세요. 나는 코드의 이러한 3 라인이 뭘하고 있었는지하지 않습니다. 난 그냥이 일을하게 놔두지 : B = A; = B; 했어. 왜이 논리적으로 깨진입니까? 그것은 바로, 직관적 일 이네요? ,된다된다 b와 b는 자 하지만 문제는 라인 37 실행 자마자, a와 b의 값 뭐야 뭐야? 당신은 사방에서 공격했기 때문에 1, 동일한, 말하자면, 당신은 동일하고 B를 변경했습니다. 일단 라인 37 실행 된, 정말이야, 이제 숫자 1의 2 장을 가지고 이 기능을 내부에, 당신은 라인 38 말 그래서 때 = B, 방금 1 ~ 1 할당하기 때문에 당신은 가지 끝장이야. 당신은 가지 당신이 신경 썼던 값을 잃었습니다. 그럼이의 원래 버전에, 내가 무슨 짓을했는지 확인합니다. 나는 대신이처럼 보이는 코드의 세 번째 라인을했다. 나는 임시 변수를 선언합니다. TMP는 임시 변수에 대한 매우 일반적인 이름이며, 정수 야 이건 내가의 복사본을 만들고 싶어 일치하기 때문. 라인 37 실행 된 일단 내 말은, tmp 디렉토리의 내부의 사본을 저장 의 값은 - 빠른 정신 검사 - 1, B의 값은 2입니다 및 TMP의 값은 1입니다. 그래서 지금은 라인 38 실행합니다. 라인 38 실행되면, a는 b의 값을 취한다. 그리고 B는 12 살, 그래서 지금은 2 명입니다. 따라서 이야기의이 시점에서, 2가, B는 2, 및 TMP은 1입니다 그래서 지금 논리적으로, 우리는 B에 불과 털썩의 tmp를의 값이 수 있고이 완료됩니다. 그래서 우리는 그 문제를 해결했습니다. 불행하게도, 난이 양식에이 프로그램을 실행할 때, 실제로 어떤 값을 교환하지 않습니다. 하지만, 왜 명확하게 하는가? 내 말은, 그저 잠시 전에서 논리적으로 문제를 해결 내가이 프로그램을 실행하면 다시 한 번,, x와 y는 변경되지 않은 상태로 유지 프로그램의 실행 말에. [안 들리게 학생 코멘트] >> 우린 아무 것도 반환하지 않은 사실 인 것. 때문에 지금까지 좀 문제가 여기가 있다는 사실을 알아하지만 그건 변 우리가 돌​​아갈 수 있었던 유일한 한 가지이며,이 C.의 제한입니다 난 가지 여기있을 거 니깐 경우있는 만, 정말 하나의 값을 반환 할 수 나는 X의 새 값을 반환 할 수 있 때문에, Y의 새로운 값을 반환 할 수 하지만 모두 돌아 오길 바랍니다. 따라서 간단한 솔루션은 여기되지 않습니다 반환. 그러나 문제는 근본적으로 왜? 우리는 실제로 무엇을 바꿔 치기했을? [학생] a와 b. >> a와 b. 그러나 a와 b는 우리가이 작품의 모든 짓을 의미합니다 x와 y, 사본이 있습니다 우리는, 스왑 기능과이 변수의 모든 3에 대해 얘기 3 분 소요 그는 고립에서 완벽하게 올바른 멋진 데요, 하지만 a와 b의 범위는 여기에 다음 행에 있습니다. 그러므로, 루프처럼 나는, 루프의 내부에 정수를 선언하는 경우 마찬가지로, 당신이 작성한 함수의 a와 b 내부를 선언하는 경우, 그들은 그 함수의 경우에만 유효 안에, 즉 가능한 한 빨리 스왑이 실행 완료로 의미 우리는 라인 25 라인 24 일부터 이동 x와 y는 전혀 변경되지 않았습니다. 당신은 변수의 사본을 교환 시간을 낭비. 그래서이 문제에 대한 솔루션이 실제로 비 명백한 것을 밝혀졌다. 우리가 단 1 값을 반환 할 수 있습니다 때문에, 값을 반환하는 매우 충분하지입니다 그리고 정말 같은 시간에 x와 y를 모두 교환하고 싶어 그래서 우리는이 곳으로 다시 데려 와야 할 겁니다. 그러나 지금,이 문제는 근본적으로 a와 b 사본 있다는 사실에서 파생는 것을 그리고 그들은 자신의 범위에 있습니다. 의 어떤 방법으로이 문제를 해결하려고 봅시다. 의는이의 제 4 변형, buggy4의 말을 듣지, 제가 실제로 돌아 스크롤하게하고 엽니 다. 이건 어때요? 이것은 우리가 그것을 해결에 찔린를하기 전에 볼 수있는 비슷하지만 간단한 문제입니다. 이 프로그램은 증가라고하고, 분명히 라인 18에 1 X 정수를 초기화합니다. 그때 x는 1 항에, 나는 다음 '증가 ... "을 주장 ,이 사건은 증가를 호출하지만 선 22 23, 내가이 증가 된 주장 2, 아마 - - 내가 여기서 x는 그게 뭐든지간에 지금 주장하지만,이 프로그램은 버그가 있습니다. 문제는 무엇입니까? 그래. >> [안 들리게 학생 응답] >> 맞아. 따라서 x는 라인 18 일, 분명히 선언되었습니다. 그 메인의 중괄호 안에 있습니다. 자, 이제 간단한 대답은 x가 존재하는 동안 것입니다 이 라인 32에 존재하지 않습니다이 프로그램은 실제로도 컴파일되지 않습니다. 내가이 코드를 컴파일 해보십시오 컴파일러는 좀 지르지 것입니다 일부 선언하지 않은 식별자 또는 그 효과 뭔가에 대해. 사실 해보자. 이 buggy4을 것입니다. 저기입니다. 라인 32 선언하지 않은 식별자가 'X'를 사용합니다. 그리고 실제로이 유용 너무의 오늘 여기에 더 명시 해 근무 시간과 집에서. 이 cryptically 작성, 좀납니다. 그러나 꽝가 있다는 사실은 buggy4.c 말을 우리 한테 바가지 나 긁히고 : 32:5, 실제로 유용합니다. 이 오류가 문자 위치 5시에 라인 32에 있다는 것을 의미합니다. 따라서 1, 2, 3, 4, 5. 문제가있는 곳 사실입니다. 또한,도 근무 시간에 집에서 염두에 두어야, 여기 운입니다. 한 실수 있습니다. 이 수정 상대적으로 쉽게거야. 하지만 당신이 압도적 오류 메시지의 전체 화면 전체를한다면, 다시 맨 아래 하나가 바로 맨 위의 하나의 증상 일 수도 있다는 알고 있습니다. 그래서 항상 맨 아래에서 버그를 심판 단지 데이지 체인 효과가 있기 때문에 그 말은 당신이 당신이 실제로보다 훨씬 문제가 제시되어 있습니다. 내 목표는 x를 증가시키는 경우 그럼 우리는이 문제를 해결 수 있을까? >> [학생] X 글로벌하십시오. 좋아, 그럼 우리는 X 세계를 만들 수 있습니다. ,하자 내가 이전에 경고하는 바로 가기를하지만, 여하튼, 우리는 빠른 수정이 필요합니다 그래서 그냥 여기 INT x를 가정 해 보자. 그 X 전세계를합니다. 이제 메인은에 액세스하고 증가가에 대한 액세스를했다가 그래서 내가 가서 지금이 컴파일한다. buggy4을 입력하십시오. 이제 컴파일 보인다. 가 buggy4을 실행할 수 있습니다. 그리고 실제로 일 것 같습니다. 이것 만이 내가 할하지 않음으로, 내 말대로 할거야이 일 중 하나입니다 난 여기 한으로 인해 일반적으로, 우리의 프로그램이보다 훨씬 더 재미 있고 더 이상 얻을 수 있으며, 삶의 문제에 대한 솔루션은 단지 파일의 상단에 모든 변수를 넣어하는 경우, 매우 빨리 프로그램을 관리 할 수​​ 엄청 시리 힘들 않습니다. 그것은 새로운 변수 이름을 생각 어려워 져 그게 무슨 무엇을하고 있는지 변수 이해하기 어려워 져 그리고 일반적으로,이 좋은 해결책이 아닙니다. 그러니 이렇게 까. 우리는 여기서 전역 변수를 사용하지 않습니다. 나는 x를 증가시키고 않기 때문에 분명히 수 - 우리가이 작업을 수행하기 때문에 하루의 끝에서,이 바보 이야기의 종류입니다 - 하지만 그 연산자에 대해 알고하지 않았거나 내가 주 자체를 변경 허락되지 않았어요 경우, 어떻게 다른이 시간이없는 큐브를 여기서 켄을 구현 할 수 있지만, 증가? 어떻게 여기에있는 것을 변경하려면 어떻게해야합니까? 그래. [학생] X에서 패스하고 돌아 [안 들리게] >> 그래, 좋아. 그런데 왜 나는 X에서 통과 후보다 그것을 반환하지 않습니다 왜 난 그냥 X + 1을 반환합니까하지 않습니다. 몇 가지만 더 여기 변경해야합니다. 나는 오른쪽 궤도에입니다. 그럼 내가 또 뭘을 조정해야하나요? 다른 사람. 그래. [안 들리게 학생 응답] 가 무효화 아니라 때문에 증가의 반환 유형을 변경해야합니다. 무효 의미없는가 돌아 없지만, 확실히 지금은되고 있습니다 그래서이 요구로 변경 - >> [학생] 정수. 나는 실제로 돌아가는거야 무엇이든과 일치하도록 INT. 지금 뭔가 다른이 아직 버그가 있습니다. 그래. [안 들리게 학생 응답] >> [Malan] 나는 X를 증가 할 필요 건가요? [안 들리게 학생 응답] >> [Malan] 아, 그래서 나는 x를 통과해야합니다. 그래서 여기에이 작업을 수행해야합니다. >> [안 들리게 학생 코멘트] [Malan] 지금 프로토 타입, 난 여기를 변경해야합니다. 이 정수가하는 그래서이 될이 - 음, 사실은 여기에 버그를 갖추고 있습니다. 의 이거 먼저 문제를 해결 보자. 이 사실은 무엇을해야합니까? 그것은 정수 뭔가있을 있어요. 귀하의 변수 x의 모든 전화를 시작하면은, 솔직히 X가 될 수도 있지만 그것은 어떤 게 어떤 갈수록 벗어나야합니다거야. 그러니까 그냥 임의로 내 도우미 함수에 대해 다른 명명 규칙을 선택할 수 있습니다, 제가 쓰는 기능. 우리는 전화 할게, 또는 우리에 신고하자 - 하자 더욱 명시 적으로 그 번호를 전화하십시오. 그래서 제가 전화 번호는 플러스 1, 무엇이든간에 반환해야 지금은 여기와 여기에 한 가지 최대 1 다른 문제가 변경해야합니다. 나는 첫 번째 줄 21 변경하려면 어떻게해야합니까? >> [안 들리게 학생 응답] [Malan] 나는 X에 지정해야합니다. 난 그냥 (X) 증가를 호출 할 수 없습니다. 나는 왼쪽에 x의 값을 변경하여 답을 기억해야합니다. 그리고 x는 지금하더라도 왼쪽과 오른쪽, 그 완전히 괜찮아 오른쪽이 처음 실행됩니다 때문에 다음 왼쪽 가지로 plopped됩니다 - 이 경우 X. 그리고 마지막으로, 이제 쉽게 수정 프로그램입니다. 이것은 단지 정수 번호를 아래에 어떤 아래에있어 일치해야합니다. 그래서 정말 바보 같은 기능에 대한 변경 사항의 전체 무리 하지만 우리가 점점 더하고 싶어한다고 일 대표. 그럼 buggy4을합니다. 어딘가 실수했습니다. 오, 맙소사. 6 라인 프로그램에서 다섯 실수. 따라서 문자가 줄 18 무슨 5의? 그래서이, 정수를 선언해야합니다. 어디 봅시다. 다른 오류의 전체 무리가 있습니다. 오, 이런 - 19, 18, 21 - 다시 만은, 그냥 여기 제어 L을 화면을 깨끗하게 그리고 꽝를 다시 실행합니다. 그래서 다섯 문제는 실제로 그 1입니다. 이제 입력, 어디 buggy4을 실행할 수 있습니다. 휴, X가 제대로 증가되었습니다. 괜찮아요. 숫자를 증가하는 방법에 대한 질문? 그래. [안 들리게 학생 질문] >> 좋은 질문입니다. 그것은 방금 번호를 x를 변경할 수 있으며 프로그램이 즉시 알 수 있다는 어떻습니까? 다시 말하지만,이 추상화이라고 생각합니다. 나는 주이고 켄은 솔직히, 증가하는 경우 그래서, 켄이 자신의 아이 패드 전화를하든 상관하지 않습니다. 그 사람이이 기능 자신의 구현과 관련있는 건 전화를하든 상관하지 않습니다. 이 말은, 주, 신경이 안 구현 세부 사항입니다. 그리고 단순히 함수의 내부에 지속적으로 그것을 변경 - 번호를 여기와 여기에 번호 - 그것은 내가 다시 컴파일로 너무 오래 걸립니다 전부입니다. 당신이 생각하는 경우는 일종의 운전 면허증이있는 분들은, 우리에 대한 많은 당신은 심지어 차를 운전 한 경우 누가, 또는 구동 한 우리 대부분은 자동차 후드 아래에 어떻게 작동하는지 모르겠어요. 당신이 후드 우리의 대부분을 열면 그대로 - 자신이 포함 - 정말 우리가보고 알고하지 않을 한 것은, 당신은 지금이 같은 물건을 느낄 수 같은 종류의. 하지만 우리는 정말 자동차가 어떻게 작동하는지 신경 필요가 없습니다 우리는 상관 할 필요가 없습니다 어떤 차의 내부의 막대와 피스톤 및 케이블의 모든 실제로 다하고 있습니다. 당신은 피스톤이 경우에 여기에 중요하지 않습니다 부르는 같이 했어요. 같은 생각. 그래. >> [안 들리게 학생 질문] 변수 XA의 순간보다 사용 전에이있는 경우 너, 프로그래머, 어디에나을 변경해야합니다. 또는 문자 그대로 파일, 메뉴를 한 다음 바꾸기, 찾을 수있는 - 그런 일을 - 하지만 이러한 변경을 직접해야 돼 있습니다. 당신은 일치해야합니다. >> [학생] 여러 변수가있는 경우 [안 들리게] 여기 같은 특정 순서,이 있었다면 다른 번호를 INT? >> [학생] 맞아요. [Malan] 그​​래. 이 함수를 호출 할 때 주문 중요. 나는 무언가를 쉼표 뭔가 함께 증가를 호출 한면 직접 매핑가 있습니다. 제목이 무엇이든 첫 번째 변수는, 여기에 첫 번째 인수의 복사본을 이루어집니다. 미안 해요. 이 괄호 안됩니다. 두 번째와 두 번째 인수 라인 업. 주문 그럼, 그래, 중요합니다. 괜찮아요. 미안 해요. 거기를 얻을 수 먼 길을했습니다. 다른 질문? 괜찮아요. 그래서 우리가 실제로 여기에 무슨 일이 벌어지고 있는지에 대한 그림을 그릴 수없는 경우 보자 후드 아래, 말하자면합니다. 이렇게하면 컴퓨터의 메모리를 나타낼 수 직사각형입니다. 당신은 메모리의 작동 방법이나 RAM의 작동 방식 모를 경우에도하면, 적어도 요즘 그것의 움큼을 가지고 있다고 가정합니다. 당신은 그것을 메가 바이트있어, 당신은 그것의 기가 바이트있어 우리는 바이트 방금 뭐 것을 주 0에서 알지? >> [학생] 8 비트. 8 비트, 맞죠? 따라서 8 0 1. 컴퓨터가 RAM의 공연, RAM 2 기가 이러한 일이면 당신은 메모리 억 또는 2 억 바이트 또는 약 8,000,000,000 또는 16 억 비트가 컴퓨터의 내부. 작은 Wooly 윌리의 예와는 달리, 일반적으로 더 이상 자기 입자 없습니다. 점점 - 노트북에서 적어도 -는 솔리드 스테이트 드라이브, SSDs 이예요 단지 더 움직이는 부분이 없다는 점. 다 전자입니다. 다 전기 기반입니다. 따라서 당신이 가지고 메모리의 1 개 또는 2 기가 바이트 대표로 사각형 생각합니다. 그래서 메모리의 덩어리입니다. 정렬 오프 파티션 컴퓨터 과학 분야의 세계는있다 메모리의 덩어리 다른 일을 할 수 있습니다. 이 컴퓨터의 RAM 인 경우 예를 들어, 같은,이 직사각형으로 제안 그것은, 국제 대회에서 귀하의 RAM 상단의, 말하자면 것이 밝혀 텍스트 세그먼트라는 것을 일반적입니다. 그 시절에는 자네가 컴파일 한 0s와 1 초입니다. 우리는 a.out이 무엇인지에 후드 아래에 검토 한 언제 모든 0s와 1 초, 당신은 프로그램을 실행하면, 그 0s와 1S는 RAM라는 식으로 하드 드라이브에서로드됩니다 그리고 RAM에 그들은 상단에 넣어하고 있습니다. 한편, 당신은 다른 일이 있어서요 : 데이터를 초기화, 데이터를 초기화합니다. 메모리의 지난 2 swaths은 자주 사용하지 않는 전역 변수를 참조 그러나 보신다면 때때로, 그들은뿐만 아니라 거기에 결국. 환경 변수, 우리가 많은 시간을 할애하지 않습니다 : 그럼 다른 물건이 하지만 두 가지 중요한 사항은은 학기 내내 돌아올 것 스택과 힙. 프로그램을 실행 할 때 사용자 컴퓨터의 메모리의 대부분은 예약되어 무언가에 대한 스택을 전화 뭔가가 힙을했다. 오늘 힙에 대해 이야기하지 않을거야,하지만 우리는 스택에 대해 이야기합니다. 스택 메이 하우스에 식당 식사 트레이의 영상을 만들어 보도록하기위한 것입니다 또는 식당의 직원이 매일 청소를 어디에 할 일없이, 그들은 최대에 층에서를 쌓아 와 마찬가지로, 메모리에 스택에 뭔가를 넣어의 생각이 있습니다 스택에 뭔가를 넣어, 스택에 뭔가를 넣어. 그리고 우리는이 무슨 뜻이에요? 이 사진의 바로 아래쪽, 컴퓨터의 RAM에 확대합시다 다음을 제안합니다. 그것은 밝혀 당신이 a.out이나 인사와 같은 프로그램을 실행할 때 - -이 프로그램은 당신이 쓴 것 뭐든지간에 다시 그는 0s와 1S은 장기 보관이 하드 드라이브에서로드됩니다 당신이 RAM에로드 플러그를 당겨 경우에도이 유지됩니다. RAM은 하드 드라이브보다 빠릅니다 - 이건 하드 드라이브보다 작은 - 당신이 그들을 실행하는 동안 프로그램이 사는 곳이지만입니다. 그래서 더블 Mac이나 PC에 프로그램을 클릭, 그것은 RAM에 하드 드라이브에서로드있어. 그것은 RAM, 방법 상단의 0s와 1S 가자,에로드 마자 소위 텍스트 세그먼트는하지만 최대한 빨리 당신의 프로그램이 실제로 시작으로 실행, main () 함수는 호출하고, 주요, 우리가 본대로,들은 지역 변수를 갖추고 있습니다 그리고 ints와 문자열과 문자와 같은 수 있습니다. 그러므로 당신이 작성한 것을 프로그램 또는 더블 클릭 한 프로그램 경우 몇 가지 변수 메인의 내부 사용 그들은 말하자면, 메모리의 스택의 맨 아래에 결국. 더 구체적으로,이 사실은 무엇을 의미합니까? 이것은 단지 의미 우리가 컴퓨터에 번호를 RAM의 바이트를 할 생각 이었다면, 이 바이트 숫자 0이 될 수도 있다는 것을,이 바이트 숫자 1, 2, 3, 4, 5, 6, 될 수 최대 2 억 모든 방법은 거기에 상단에있는 모든 방법 것이다. 다시 말해, 우리는 바이트의 관점에서 RAM 또는 메모리에 대해 이야기 할 때, 그냥 그 사람이 기억의 그 덩어리 각각의 수에 어떤 결정했다 의미합니다. 그래서 당신은 정수 32 비트가 필요하거나 숯불 8 비트를 필요로 할 때, 그들은 메모리에 어디로 결국합니까? 개념적으로, 그들은 단지 스택이라는 것은의 하단에 결국. 주이 기능을 호출하면 그런데 지금은 흥미로운 것은 - foo는 호출 함수, 그냥 임의의 이름을 가정 - 메모리의 스택의 하단에 어떤 일이 생기 메인입니다; foo는 이제 메모리에 메인의 상단에 놓입니다. foo는이 개념적으로 메인에있는 위의 정렬을 종료 한 한 지역 변수는 그럼. foo는이 바라는 또 다른 함수를 호출하면 그 변수는 여기서 끝. 바는 여기 여기에 다른 뭔가를, 여기 호출합니다. 그래서 프로그램을 실행하는 방법에 대한 흥미로운하면 함수를 호출된다는 것입니다 그리고 그 함수는 함수를 호출하고 해당 함수가 함수를 호출하는 것처럼, 당신은 메모리 기능이 스택을 구축 할 수 있습니다. 만 함수가 반환되면 그 메모리를 다시 나올 않습니다. 따라서 컴퓨터 프로그램에서 메모리가 부족 할 수있는 가장 쉬운 방법 중 하나 돌아 오지 않을 기능을 작성하는 것입니다. 따라서 예를 들어,가 의도적으로 버그가 프로그램을 많이 보여 보자. 내가 가서 # 포함 갑시다 INT 메인 (무효), 그리고, (2> 1), 이는 아마도 본 우리 변경되지 않습니다 동안하는 겁니다 그리고 내가 지금 가서 printf하자. 사실, 그 이하 시각적으로 재미있을거야. 이 작업을 수행하자. 를 들어 int는 전 = 0; i>을 0 -의이 실수를하게 - 내가 + +. 여기의 printf하지 맙시다. 의 내가 설교 한 것을 연습 보자. , 가자, 여기서 무효의 합창을하는 방법이 있으며, 우리는 INT 내가 말할 거예요 그럼 내가 printf 말할거야 - 아니, 그럼이 더 재미있는합니다. 의는 실제로 전혀 아무런 내용도 출력되지 보자. 합창은 (i) : 이런 짓을하자. 괜찮아요. 때문에 그래서이 버그인가요? 프로그램이 실제로 관심 아무 짓도하지 않기 때문에 내가가는대로이를 만드는 중이에요. 하지만 그게 목표 없습니다. 목표는 누구의 주요 기능 뭐 확실히을 수행하는 프로그램을 작성하는 것입니다? 자체를 호출합니다. 실제로, 우리는 루프를 필요하지 않습니다. 자, 그저 정말 기본적인 버그 시력을 잃지 않도록으로서이 일을 단순화합니다. 주요 통화 합창 일부 합창을 노래하는, 그럼 내가 멍청한 짓을 했어 나는 합창 통화 합창을했다 나는 다른 사람이 아마도을 구현하는 줄 알았는데, 때문에 지금이 아직 컴파일하지 않을 수 있습니다. 나는 무엇을해야합니까? 제가 프로토 타입을 필요 기억 해요. 그래서 (INT I) 여기 무효의 합창을이 필요합니다; 여기 내려 갔는데 이제 - 실제로, 그럼 더 큰 창을 사용할 수 있도록. 가 진행하고 합창을 보자. 가 진행하고 합창을 보자. 선언하지 않은 식별자 제가 사용. 오, 바보 같은 짓이었다. 우리는 인자를 필요하지 않습니다. 그냥 이렇게합시다. 난 우리가 이런 식으로 시작했습니다 기원합니다. 그것은 쓰기 훨씬 쉽게 프로그램이었습니다. 가. 지금의, 내 터미널 창에 갈 꽝을 다시 실행, 그리고 여기에 우리가 가자. 그건 정말 빠른 데요. 무엇 실제로하지만 일이 있었죠? 우리가 볼 수 있도록 음, 지금은 인쇄 행을 추가합니다. 저 ( "난 여기에있어") printf 말 거예요 - 더 변수. 우리는처럼 갈거야. , 날이 다시 실행 보자. 나 코러스를 다시 실행 보자. 그리고 ... 어서. 계속 해요. 옆으로, 왜 아직 추락하지 않았나? 세분화 잘못 전에 매우 빨리 일어났다. [안 들리게 학생 응답] >> 맞아. 그래서 바로 인쇄하려면 시간이 걸려요? 그것은 단지 컴퓨터의 부분에 더 많은 노력이 소요됩니다. 그리고는 다음과 같습니다 세분화 잘못이야. 그렇게 빨리 프로그램이 실행 얼마나납니다. 당신은 아무것도, 슈퍼 빠른 인쇄를하지 않은 경우. 어떤 일이 벌어지고 있기 때문에 그러나 우리는 여전히이 분류 오류 있나? 당신은 컴퓨터의 메모리가 배치되는 방식에 대해 생각한다면, 이 주요 할 일이 있지만, 여기은 그냥 코러스를 호출 해,이 합창 전화 할게 있어요. 난 지금 내 미학을한다면 지금이 바로 합창, 합창, 합창을 말할 것입니다 코러스, 합창, 합창, 합창, 광고 에드, 그리고 결국 무슨 일이 일어날 지? 큰 그림은 그대로,이 경우, 어떻게는 개념적 어떻게됩니까? 스택 오버런 힙. 또는 더 나쁜, 당신은 단지 텍스트 세그먼트를 포함 모든, 오버런 프로그램을 나타내는 0s와 1S가있는 것입니다. 즉,이 게임은 정말 슈퍼, 슈퍼 좋지 않습니다. 당신의 프로그램은 통제 불능 몰락했다. 당신이 의도 것보다 더 많은 메모리를 사용하는 모든 때문에이 경우에 바보 같은 실수를 저질렀의, 또는이 경우에는 아주 신중하게 수행 기능 자체를 호출. 자,이 모든 나쁜 아닙니다. 당신이 올바르게을 사용할 때 자신을 호출하는 함수는 실제로 큰 힘을 가지고 있습니다. 나는 제대로 여기를 사용하지 않았습니다. 이게 다 나쁘지는하지만 실제로 절대 멈추지 있다는 사실이 자신을 호출 이 프로그램의 여기 근본적인 약점이다. 어디 우리는이 모든거야? 정말 무슨 일이에요? 우리가 그 예에서 뭘하고 있었지처럼 나는 증가 함수를 호출 할 때, 난 내가 통과 한 같은 값을 나는 숫자 1의 사본에 전달하기 때문에 다음과 같은 문제가 발생합니다. 증가의 예로 이동하자, 여기이 남자. 다음은 실제로 일어나고있는 일이지. 제가 증가를 호출하고 여기 무슨 일이야, pictorially, X로 전달하면이 있습니다. 여기 저장된 1의 값이 내가 실제로 증가를 호출하는 경우는, 어떤 지금은 합창이라고합니다 - 아이 패드가 날 밀어 내고 있습니다. 자,이 증가 연락, 우리는이 다음 함수가 될이 벌어지고있는 건지 모르겠습니다. 그래서 실제로 일어나는 것은 주에 여기 어딘가에 나는 메모리의 덩어리가 그 숫자 1을 저장합니다. 제가 증가를 호출하면, 난 메모리의 또 다른 청크를 사용 하지만 지금은 1의 사본을 갖추고 있습니다. 그 값을 증가하면이 2가됩니다 하지만 어떻게 증가를 반환하자마자 어떻게됩니까? 이 메모리는 그냥 운영 체제로 송환됩니다 이것은 당신이 한 모든 유용한 아무것도 없음을 의미합니다. 원래 주에 포함 된 1 실제로 아직도 있습니다. 어디 우리는이 같이 갈거야? 이 메모리에 당신이 바이트의 다시 - 투 - 다시 순서를 가지고 밝혀 당신은에 물건을 넣을 수 있으며, 우리가 이미 뭔가를 본 사실을 켜지는지 백업 백업 백업 할 일을 다시 넣어 포함이. 주 1 지금 2 주간을 기준으로 문자열은 무엇입니까? 단지 문자의 집합입니다. 그래서, 당신은 메모리에 번호를 넣을 수대로 밝혀 마찬가지로 당신은 메모리에 문자를 넣을 수 있습니다. 그리고 일단 우리는 뒤에 백업 할 백업 다시 메모리에 넣어 문자를 시작 가 밝혀 루프 또는 잠시 루프에 같은 사물의 가장 간단한을 사용하여 해당, 우리는 문자열에있는 문자를 통해 왼쪽에서 오른쪽으로 반복 할 수 있습니다 그리고 모두 다른 문자에 넣어 마사지 시작 - A와 B가 될 수, B는 C가 될 수 - 궁극적으로, 우리는 실제로 의미가 영어 문장을 취할 수 있도록 한 번에 그 편지 하나를 각각 변환 우리 컴퓨터의 메모리를 통해 도보로 실제로 암호화 왼쪽에서 오른쪽으로. 그럼 여기서 우리 다섯 분 쉬었다합시다, 그리고 우리가 돌​​아 왔을 때, 우리는 정보를 출격이 과정을 시작합니다. 괜찮아요. , 우리는 몇 가지 암호화에 뛰어 이러한 일들이 배열라고하기 전에 정말 가지 혼란 같은 느낌 때문에 내 모든 질문에 대한 일시 정지하자 해당 주제의 일부. 우리가 할 수있는 경우에 그래서 지금의이 해결 보자. 우리는 단지 반환 값에 대해 얘기, 우리는 인수에 대해 얘기 우리는, 우리가 올 주에 돌아 오면되는이 개념에 대해 얘기 너무 말을,이 스택 트레이의 전체 무리로 메모리를보고, 이러한 올라 아래에서 해당 스택에 넣어됩니다 각 트레이 현재 호출되는거야 기능을 나타냅니다. 질문? 내가 여기서 질문을 물어 보자. 내가 그것을 우리의 이전의 Q & A.의 일부 전에 어떤 건지이 다시 단순화하자 증가가 열려 괄호, int는 숫자를 가지고 있다는 사실은, 괄호을 닫았 - INT 숫자는 무엇을 나타 냅니까? [학생] 인수입니다. >> 인수입니다. 좋아요. 그러나 인수가 뭐죠? [안 들리게 학생 응답] >> 그게 뭐야? 그래서 당신이 통과 >> [학생] 일 좋아요, 그럼 당신은 집에 통과하고, 더 일반적으로 그냥 입력 있다는 것을. 당신은 인생의 기능 및 그 기능의 목적을 글을 쓴다면 뭔가 당신이 그것을 사용 좀 다른 때마다하는 것입니다 그리고 정말 일어날 수있는 유일한 방법은 입력으로 제공하는 보여야 하니까요 그렇게 입력을 할 때마다 다른 뭔가를 할 수 있도록. 그래서 함수가 입력을 소요 할 때 두 가지를 지정해야합니다. 당신은 그 입력에 부여 할 이름을 지정해야합니다 순전히 자신의 편의를 위해 당신은 참조 할 수 있도록 I 줄 32 여기 그랬던 것처럼 자신이, 쓰기하는 기능 인치 하지만 당신은 또한 C는 프로그래밍 언어이기 때문에 유형을 지정해야합니다 그건 정말, 당신은 변수를 원하는 경우, 당신이 무엇 데이터 형식 컴퓨터를 얘기해야합니다 있도록 많은 부분에서 해당 변수에 할당하는 방법을 몇 비트 알고 그 6이 될 수 있기 때문에 - 미안해, 6 수 없습니다. 이 16 수, 그건 8이 될 수는, 심지어 64, 32이 될 수 하지만 컴퓨터는 알아야합니다. 이제 왼쪽에있는 INT는 반대로 무엇을 제시 하는가? [안 들리게 학생 응답] >> 그게 뭐야? 기능 >> [학생]를 입력합니다. 함수의 종류와, 더 구체적으로는 출력의 종류. 맞아. 따라서 괄호 안의 것은 반면의 입력은 (있는 경우), 대표 왼쪽에있는 것은 그 출력을 나타냅니다. 이 경우에는 증가는 분명히 정수를 반환, 그래서 int는이 함수의 반환 유형입니다. 그게 무슨을 반환한다는 것은 무슨 뜻입니까? 그대로, 당신은 다음 키워드 수익 (ROI)을 사용하고 재 만약 키워드의 오른쪽에있는 정수입니다하면 그리고 우리가 약속 한 것과 실제로 일치합니다. 안녕하세요, 세계 - - 당신은 이런 일을 할 수없는 그 문자열이기 때문이다. 분명히, 정수하지 않습니다. 그래서 짧은에, 부담이 우리를 정말이야 프로그래머가 특정 할 수 우리가 돌​​려 무엇과에 관해서 실제로 돌려 봅시다. 여기 문맥 이제 컴퓨터의 메모리 기가 바이트, 2기가바이트 때문입니다 - 무엇이든 - 그게 더 아마, 아마 그건 좀 덜, 하지만 컴퓨터는 다른 섹션을 갖는으로 보는. 뭔가 거기가는 다른 뭔가가 거기에갑니다 다른 물건은 중간에 간다, 오늘날 우리가 이야기 시작 하지만 우리는이 시간이 지남에 돌아 가면됩니다. 지금은 우리가 정말 신경 메모리의 유일한 조각의 텍스트 세그먼트입니다 단지 0s와 1S 그 꽝을 나타냅니다 때문 출력되었습니다. 당신은 a.out과 같은 키보드에서 명령을 실행 그럼 언제 또는 더블, 맥 OS 또는 Windows에서 아이콘을 클릭 프로그램은 하드 드라이브에서 RAM에로드 그리고 그것은 말하자면, 컴퓨터의 RAM의 상단에 plopped있어. 한편, 프로그램이 시작으로 실행과 주요가 호출됩니다 이 프로그램에, 당신은 작성 또는 프로그램을 Microsoft 또는 애플 썼다 지역 변수의 사용자 컴퓨터의 메모리의 맨 아래에 아래에 결국. 그러나 그 자체가 변수 나 인자를 가지고 주요 통화가 다른 함수 경우, 그들은 그 위에 결국. 그 함수가 뭔가를 호출한다면, 그들은 그 위에, 그 위에, 그 위에 결국. 그리고 한 번만 함수가 실행 완료 트레이 스택, 말하자면 않습니다 낮은 낮은 얻을 시작합니다. 그리고는, 요약, 당신이 큐브를 부르는 이유가 때 설명 무슨 당신은 증가를 호출하거나, 당신은 가치의 사본을 전달하고 있습니다. 그리고 그 pictorially 의미하는 것은 문자 그대로 숫자 1을 작성할 것입니다 메모리의 다른 부분에서 변화 그 증가의 경우 1-2 또는 다음 큐브의 경우 8에 거리에 그 메모리를 던지고 가능한 한 빨리 증가 또는 큐브 함수를 반환 있습니다. 질문. [학생] 어디 ​​전역 변수를 저장하는거야? 글로벌 변수는 현재 초기화 데이터 또는 초기화되지 않은 데이터라는 것을에 저장됩니다 당신이 전역 변수가 있고 즉시 값을 그 값을 지정하는 경우의 차이는 존재 등호로는, 거기에 맨 위에 종료 방금 INT X를한다고해도, 값이없는, 그것은 RAM에 약간 낮은 생 단순히 대회로. 다른 질문? 괜찮아요. 우리가 더 강력가 거든 그래서이 사진은 다시 올 것이다 우리가 컴퓨터로 무엇을 할 수있는, 하지만 지금은, 우리의 암호에 대한 간단한 소개를하자 세계의 모든 문제가 해결되지 않는 암호화의 특정 유형의 하지만 그 중 일부를 해결할 수 없습니다. 여기이 경우, 우리는 비밀 키 암호화라는 게있어. 비밀 키 암호화는 이름에서 알 수 있듯이, 비밀의 보안을 창출합니다. 당신이 초등학교에 다시으로하면 예를 들어, 당신은 약간의 비밀 연애 편지를 전달했다 당신이 고객을 통해 그 메모를 전달하고자 할 경우 아들, 딸에 당신은에 분쇄했다, 당신은 아마 영어에는 메모를 작성간에 모국어는 않습니다. 오히려, 당신이 암호화 할 수 있거나 요즘 그들에게 문자 메시지를 보내 수 있습니다. 하지만 당신은 실제로 교실을 통해 그들에게 메모를 전달 할 수 있습니다. 와 같은 방법으로 안전하게 작업을 수행 할 수 귀하의 친구와 선생님 당신이 글을하는지 모르겠어, 당신은 매우 간단한 알고리즘을 마련 할 수 당신이있을 젊은 있지만, 단지 단어를 출격시켜야합니다. 그래서 그 대신를 작성하면, B를 작성 할 수 대신 B의 당신은 C를 작성 할 수 대신 C의 당신은 등등 d를 작성하고 있습니다. 또는 당신은 더 정교 번역을 마련 할 수 다른 편지에게 편지를. 그러나 캐치는이 메모를 보내는 누구에 아들, 딸입니다 필요 뭐, 분명히 뭔가를 알고 있나? >> [학생]는 당신이 보내는 어떤. 어떻게 당신의 비밀은의와 b의와 c의와 D' s의 사이에 매핑이 무엇인지와 같은 것입니다. 단지에서 B, B에서 C로 이동 문자 각각에 1을 추가 있습니까? 그것보다 더 복잡한가요? 따라서 당신과 당신의 호감이 비밀 정보가 필요합니다 하지만 여기에 함정 - 22 종류가 있습니다. 이 처음 인 경우는 클래스를 통해이 사랑의 편지를 보낼 어떻게 그 소년이나 소녀는 비밀도 무엇 때문인지 알고가는거야? 따라서 비밀 키 암호는 세계의 모든 문제가 해결되지 않습니다 그리고 관계는 우리가 학기 끝 부분에 다시 올 것을 이곳에 있어요. 마찬가지로 우리 대부분은 Amazon.com에서, 예를 들어, 사용할 수있는 사람을 알고하지 않습니다 아직 우리의 많은 사람들이 아마 Amazon.com에서 물건을 구입 한 그리고 우리는 이러한 전자 상거래의 보안 있다고 가정 배운습니다. URL 아마​​ HTTPS는 어딘가에 어쩌면 멍청한 자물쇠 아이콘이 있다고 귀하의 신용 카드 정보를 확보 암호화의 일부 종류가 귀하와 Amazon.com 사이에 있습니다. 암호화가 포함해도 아직 몇 비밀을 알고 아직 저는 아마존에서 아는 사람없고, 확실히 비밀 모든 종류의 배열 적이 없다 아마존에서 누군가와 함께, 어떻게이 일을 내 컴퓨터 또는 브라우저는? 암호화 기타 유형의 문제를 해결하는 모두가 있다는 사실을 알아가집니다. 그러나 오늘, 우리는 단순에 초점을합니다 당신은 어떤 비밀을 알고 사전에 준비 할 수있는 +1 또는의와 b의 사이 매핑처럼. 그리고 암호화 과정은 일반적으로이 포함됩니다. 당신은 왼쪽에 여기 묘사 된 일부 일반 텍스트를,이 당신은을 암호화하기위한 알고리즘 또는 프로 시저의 어떤 통해 실행 - 어쩌면 그 단지 A와 B가되고, B는 C가됩니다 - 그리고 당신은 ciphertext이 생깁니다. 한편, 한 번 호감이 비밀 메모를받습니다 그 또는 그녀는 해독은 일반적으로 그 알고리즘을 전환 할 수 있습니다 일반 텍스트를 다시 할 수 있도록. 이 물리적 화신이 있습니다. 예를 들어,이 작은 비밀 디코더 반지 이 두 다이얼이 있다는 의미에서 링입니다. 이 물건의 외부 주변에서 Z까지 문자가가 그들은 무작위 순서로하고, 비록 그리고 내부에 어떤 숫자가 실제로있다 이러한이 반지 어떤 종류의 내부는 외부를 돌려 있지만 수 문자와 숫자를 줄에 순서를 유지해야합니다. 크리스마스 스토리라는 영화에서, 당신은 그 작은 Ralphie를 볼 수 있습니다 리틀 고아 애니의 비밀 메시지가 그에게 어떻게 된 건지 알아 냈어에 그렇게 열성적이었다 그는 시리얼 상자에 숫자 메시지의 형태로, 내 생각, 전달되었습니다 그리고 당신은 시리얼 상자에 온 모든 작은 카드를 축적했다 당신이 그들을에 우편으로 보내했고, 당신은 그 비밀 디코더 링을 다시했습니다 당신은 마지막으로 매핑 문자와 숫자 사이에이 뭔지 알아내는 수 있도록 또는 문자와 문자. 우리는이 같은 일을 실행하거나 대표에 대해 어떻게 컴퓨터에 갈 수 있나요? 우리는 좀 더 유연하게 자신을 표현하는 방법이 필요 우리 변수는 지금까지 허용보다. 우리는 문자를하신 적이 ints 셨으니 까, 우리는 수레와 복식과 몇 가지 다른 했어 하지만 그건 정말 우리가 일을 표현하는 것을 허용하지 않습니다 메모리의 개별 조각 단어와 문장 및 구문처럼. 사실, 우리는 그런 것들을 문자열을 호출했습니다 하지만 우리는이 정말 CS50 라이브러리에서 단지 단순화 것을 약속드립니다 우리는 껍질에 장래 있는지. 그리고 여기에을 수행하는 시작하자. 내가 가서 파일을 열어 보자 - 이러한 파일의 모든 이용하실 수 있으며, 평소 온라인 - 이른바 array.c 문자열 관련이없는 문제를 해결하지만 여기에 사진을 페인트 칠하는 방법 어떻게 우리는 배열이라는 것을 사용할 수 있습니다. 배열은 데이터 형식입니다. 그것은 여러 개의 작은 데이터 형식 그것의 내부가 종류의 변수의 타입 다시 백업 할 백업하기 위해 백업합니다. 우리는 귀하의 퀴즈 평균을 제공하는 작은 프로그램을 작성하는 싶었어, 그래서 예를 들어, 경우 이 퀴즈가 50 같은 코스, 당신은 아주 쉽게도 지난 주 재료의 일부에 따라이 프로그램을 작성할 수 GetInt와 변수 몇를 사용하여 : INT quiz1, 정수 quiz2. 그리고 아주 간단입니다. 이 코드를 최대 20 라인 프로그램을 구현하는, 어쩌면 10 살 인데요 이 퀴즈 점수의 사용자를 부탁하고 자신의 평균을 계산합니다 그 그들을 함께 추가 2로 분할 한 다음 결과를 인쇄하여. 우리는 아마도 분의 일부 번호 다음에 매우 쉽게 지금 그런 짓을 수 있습니다. 그러나 문제는 50 3 퀴즈 또는 4 있다고 가정 그입니다. 당신이 퀴즈 매주했다 클래스에 동일한 프로그램을 사용하고 싶어하고 있다고 가정합시다. 매주 퀴즈 한 클래스에 대해 생각해보십시오. 한 학기에 16 정도 주가 있​​으면 이제 16 변수가 : INT quiz1, INT quiz2, INT quiz3, 정수 quiz4. 이 중복되어 표시되기 시작 즉시,이 복사 코드 붙여 넣기 당신이 더 좋은 방법이 있었으면되기 시작한다. 그리고 고맙게도 때문에 배열의가 있습니다. 그래서 한번 해보자 구. 첫째, 내가 우리가 지금까지 사용하지 한 매우 단순한 일을 소개하겠습니다 하지만 코드에서 종종 볼 수 있습니다. 이것은 일반적으로 상수라는거야. 따라서이 값이 변경 없다는 의미에서 상수입니다. 상수를 만드는 인간의 규칙 그냥 정말 코드에서 서있는, 모든 대문자를 사용하는 것입니다 및 C에서 사용하는 특별한 키워드는 # 정의되어 있습니다. 그래서 우리는 # 그 다음에, 당신은 상수의 이름을 사용하려는 단어를 공간을 정의 말 다음 상수의 값입니다. 이 변수에 무언가를 지정 다릅니다 확인할 수 있습니다. 로그인 같습니다 없어요, 더 세미콜론이 없습니다. 이것은 일반적으로 선행 처리기 지시어로 알려진 곳입니다 그 다른 시간에하지만, 더. 지금이 퀴즈라는 변함 값을 생성 그의 실제 숫자 값은 2입니다. 그래서 어디서나 당신이 파일을 통해 퀴즈, 퀴즈, 퀴즈 참조 그건 그냥 숫자 2입니다. 지금 주요 보면, 어디 방법이 작품을 보자. 처음 엔 약간 이상한 모양,하지만 주 1 일부터 모든 것들입니다. 등급의 사용자에게 문의하십시오. 우리가 어떻게이 작업을 수행합니까? 라인 22 -이 정말 육즙이 부분입니다 - 내가 수레를 선언 하지만 단지 하나의 부동. 나는 오히려 부동 소수점 값의 배열을 선언거야. 그 변수는 여기에 암시로, 성적이라고 할 것입니다 하지만 새로운 구문의 유일한 조각 그런 다음 대괄호 있습니다. 나는 부동 등급 한 다음 열기를 브라켓 다음 번호를 말 한 사실 - 이이 우리가 이런 짓을 마치 일정한 경우 발견 - 이는, "헤이 컴퓨터가 나에게 두 수레를주고는가 총체적으로 그 성적이라고 불러." 이 같은 훨씬 더 지루한 과정에 대비되어 있습니다 : 부동 grade1, grade2 떠, 등등. 따라서 배열은 우리가이 아이디어를 구현 할 수 있지만, 훨씬 덜 messily, 우리가 말 대신에 16 주 학기 16 코드 1 줄을 쓸 수 있도록하는 방법 인치 나는에 하드 코드 2를 원치 않았기 때문에 논리적으로 지금 생각해 보면, 3 CS50 변경 대신 퀴즈 내년 가정 내가 여기에 숫자 2를 가지고, 난 여기에 숫자 2를했​​다 여기 2, 여기에 번호를 숫자 2를했​​다. 그것은이 실수하기가 매우 지루하고 아주 쉽게됩니다 실수로 3-1 값을 변경하고 2 다른 가치를 그리워합니다. 그래서,이 거리에 대신 추상적으로 이동이 상수를 사용하는거야 그 이름에서 알 수 있듯이, 절대 변경됩니다. 그리고 지금 우리는 다른 권한이 있는지 여부에 상관없이,이 년 다음에 퀴즈 없습니다 난 그냥 상단에 여기 한 곳에서 그걸 변경해야합니다. 그래서이 전부 상수입니다. 한편, 새로운 개념 기능은 배열의 것입니다. 따라서 대괄호 나 한테 많은 수레를주고 나를 총체적으로 여기 성적 전화 할 수 있습니다. 그래서 지금 내가해야 할 일을 살펴 보자. 여기에 라인 24에서 루프의 시작 부분입니다. 이건 정말 별건입니다. 단지 퀴즈를 사용하는 대신 하드 코딩 된 숫자있어. 그러나 지난 주부터이 지적 다른 건 아무것도 없습니다. 이 ( "% d 개 중 # % d 개 퀴즈 :") 때문에 printf, 그냥 printf입니다 난 그냥 저 2 숫자 1을 퀴즈 후 2 개 중 2 개의 줄에서 인쇄 할 때문입니다. 그래서이 순전히 미적 것입니다. 그러나 흥미로운 부분은 이제 라인 27에 있습니다. 부동 소수점 값으로 두 자리 표시 자 중 하나를 입력하기 위해서는, 다시 대괄호를 사용합니다. 루프이 분명, 내가 어떤 가치를 동등 시작 되었기 때문에이 경우는 제가을 사용? [학생] 0. >> [Malan] 0. 따라서이 루프의 첫 번째 반복에서, 내가 코드에서 쓴 것처럼이고, 내 코드에서 쓴 것처럼하지만 루프의 두 번째 반복에 그입니다. 이름에서 알 수 있듯이 때문에 나는 변수를 사용한다는 사실은 완벽 그것은 모든 반복에 그 값을 변화있어 그래서 한 번에이 배열 한 자리를 작성 한 것 뿐이예요. 이 배열은 어떻게 생겼는데? 여기 화면에 슈퍼 간단한 사각형을 그린 이유는 전에 이런 이유로이었다. 배열은 메모리의 다른 덩어리에 이어 메모리의 덩어리입니다 메모리의 다른 덩어리에 이어 등등. 내 배열 여기이 경우 사이즈 2입니다면, 제가이 일을 할 것입니다 내 퀴즈 점수를 입력하여 여기가 좋아 - 난이 하나에 100 탔고, 나는이 하나를 99 있어요 - 나는 단지 컴퓨터를 요구했기 때문에 다음이 메모리도 사용할 수 없을 수도 사이즈 2의 배열하십시오. 이러한 광장 바로, 아직 거기 있습니까? 만 2 수레를 요청하는 경우에도 당신은 여전히​​ RAM의 2 기가 바이트 있습니다. 따라서 배열 뒤에 아이디어는 컴퓨터가 단지 메모리의 덩어리 걸립니다 있다는 것입니다 그리고 백업 백업 백업 다시 작은 조각을 apportions. 그리고 그렇게 모든 배열이 있습니다. 당신이 물건을 넣을 수있는 메모리 내부의 연속 된 덩어리입니다. 이는 좀 지루 연산을 수행하는 발생합니다. 여기 아래로 스크롤하면 그때 배열을 통해 반복 곳이 있습니다. 나는 배열의 값의 모든 합을 마련 그리고 사실은 퀴즈로 나눈 금액을하려면 여기를 라운드 함수를 사용합니다. 하지만 지금은 충분한 연산의 일종으로 좀 손을 흔들 보자. 그러나 나를 위해하고있어 모든 궁극적으로 평균을 계산합니다. 그래서 일단 퀴즈 플러스 둘째 퀴즈는 2로 나눈 후 정수로 출력. string1라는 다른 예제하지만 그건 지금 전환, 이는 비슷한 사진 만 사용 문자열을 그린다. 내가 가서 한 순간을 위해이 일을 간단하게 보자. 지금의 들여 쓰기 미안 해요. 이 예제의 라인 (19)의 공지 사항, 전 사용자로부터 문자열을. 하지만 다음 라인에 22 이후 일을하는지 확인합니다. 나는 실제로 내가에서 최대 반복거야 - 그리고이 새로운 마술이야 - 나 strlen, 문자열의 길이. 이것은 당신이에게 문자열을 통과하면, C와 함께 제공되는 기능입니다 그렇게 문자열에 얼마나 많은 문자를 알려줍니다. 그게 전부 야. 그리고 대신 문자열 길이 나 strlen 있다는 사실은 더 간결 단지 때문입니다. 30 년 전, 사람들은 같은 간결 가능한 일을 작성하는 좋아 그래서 우리는 여기 규칙을 지켰습니다. 난 + + 그냥 각 반복에서 i를 증가 의미합니다. 그리고 지금은 정말 재미있는이를 확인합니다. 라인 24에서, 내 말, "컴퓨터, 날 8 비트 문자를 제공하고, C 호출." 하지만이 오른쪽 말씀에 무엇입니까? 영어로, 그 무엇을 나타 냅니까? [학생] 배열의 첫 번째 문자가 있습니다. 그렇지. 나에게 배열의 첫 번째 문자를 제공합니다. 또는, 더 일반적으로, 나에게 배열의 i 번째 문자를 제공합니다. 그리고 지금은 중요합니다 알고 있습니다 컴퓨터 과학자로, 우리가 실제로 0에서 계산하고 있습니다. 당신은이 일을 시작하는 지금 재량이 없습니다. 이제 컴퓨터의 기대에 따라 행동과 0을 기준으로해야합니다 [0] 왜냐하면, 문자열의 첫 번째 문자가 될 것입니다 [1] 두 번째가 될 것입니다, [2]는 세 번째, 등등 될 것입니다. 따라서이 프로그램은, 내가 컴파일하면 이런 일이 또 string1이므로 string1을, 지금은 내 터미널 창에서 string1를 실행했습니다. , 그것은 입력을 기다리고 있어요, 그래서 제가, 데이비드 입력 입력거야 사항이 내가하는 일이 있기 때문에 지금은 서로 다른 라인에 데이비드를 인쇄합니다. 한 번에 한 문자를 인쇄 할거야. 우리는이에서 오늘 세부로 이동되지 않습니다,하지만 여기이 수표 전 순간을 삭제했습니다. 그것은 사용자가 올바르게 작동하지 않는 경우 해당 밝혀, 적대하거나 혼동, 당신은 실제로 어떤 길이의 문자열을 제공하기 위해 실패 할 수 있습니다. 당신이 키보드의 잘못된 키를 누르면 경우, 당신은 전혀 문자열을주지 수 당신은 악의적 인 경우 또는, 당신은 에세이 기가 바이트의 가치에 붙여 넣으려고 수 컴퓨터의 메모리가 부족 실행하는 경우이 문자열을 작성하고, 우리가 NULL이라는 특별한 값을 돌려 주겠다을 이용할 수 있습니다. 그럼 지금부터, 단지 NULL 불리는이 특별한 값이있는 걸 알아 그 우리가 다른 것들 사이에, 메모리가 부족 때 확인 할 수 있습니다. 하지만 지금 string2를 열고 경우, 여기 차이가 발생하는 경우가 종종 있습니다. string2와 여기 차이를 확인할 수 있습니다. string2를 통해, 루프이 조금 다릅니다. 우리가 그 다른 시간에 대해 이야기 할 수 있도록 내게 NULLs을 삭제 보자. 어떻게 루프의이 시간에 대한 다른거야? 나는 앞의 예를 다시 사용할 수 있습니다. 버전 2입니다 그럼,이 버전 1입니다. 1, 2. 1, 2. 위치 나 strlen 전화는? 이 루프의 처음 부분에 있어요. 내가이 짓을하는 이유에 대한 어떠한 생각? 그래. [학생] 그래서 당신은 함수를 매번 호출하지 않습니다. [Malan] 우리는 함수를 매번 전화를하지 않는 군. 그렇지. 사람들이 슈퍼 간단한 걸 루프에의 기억 일단 정렬의이 초기화, 상태 및 업데이트입니다 것으로 알고 있습니다. 문제는 조건이 루프의 모든 반복에 발생한다는 것입니다. 그리고 여기이 예에서, 무슨 일이 내 조건이라는 사실에 대한 안 좋은가요? [학생] 당신은 나 strlen 전화를하고 있습니다. [Malan] 당신은 또 한번, 또 한번 다시 나 strlen를 호출하고하고 있습니다. 하지만 내가 다윗을 입력 한 다음, 그 문자열의 길이는 5 그리고 루프의 모든 반복에 변함이 없을거야 문자열은 여전히​​ D--V-I-D. 때문에 그래서이 점점 더 중요한 아이디어가되기 위해 무슨 일이야에서 힌트입니다 그냥 컴퓨터가 불필요한 작업을 수행하지 않는 디자인 결정으로 알려져 있습니다. 마찬가지로 일반용에 pset2, pset2의 미리 실제로 암호의 일부 번호를 구현하기 위해 도전 것입니다, 당신은 모두 암호화 할 수 있도록 암호화 알고리즘의 일부 번호, 등 하나 Ralphie 같은 해독 비밀 메시지가 디코딩. pset2의 해커 판에서, 우리는 조금 더 갈거야. 우리는 실제 컴퓨터 시스템에서 당신에게 파일을 넘겨거야 즉, 사용자 이름 및 실제 암호화 된 암호를 왕창 포함되어 있습니다 그리고 해커 버전에 대한 도전은 그 암호를 해독 될 것입니다 실제로 이러한 암호를 생성하는 데 사용했던 암호화 나 무슨 비밀 알아 봅시다. 그리고 우리가 여기 C의 새로운 기능을 사용하여이 작업을 수행하는 것 내가 명령 줄 인자로 알려져 단지 데모를 줄 수있게 할 것이다. 당신의 일부 섹션이나 교과서에서 보셨을 수 있으므로 그것은, 밝혀 메인은 ​​항상 괄호 안에 무효 필요가 없습니다. 그것은 두 개의 인수와 함께, 메인도 같이 작성 될 수 있다는 판명 argc는 단어의 수입니다 argc와 argv가, 당신은 명령 줄에서 프로그램의 이름 뒤에 입력하는 그리고 변수는 argv는 실제 단어입니다. 거기에 대괄호가 제안 때, 변수는 argv는 분명히 배열입니다. 이 메모리에 문자열 뒤에 문자열 뒤에 문자열이 될거에요. 그래서이 같은 일이 우리가 pset 2 시작 할 수있을 것입니다. 나는 우리가 월요일에 다시 와서하고 실행합니다 예입니다 argv1을,하는 경우 그것은 아직 아무것도하지 않는 것 것을 확인할 수 있습니다. 단지 자신의 이름을 출력합니다. 하지만이 프로그램은 분명히 반복하는 작별 인사 클래스가 통지 말한다면, 프롬프트에 입력 된 단어의 각 이상. 그리고 사용자가 프롬프트에 입력 한 단어에 대한 액세스 권한을되는 수단 주 (argc, argv가)을 int로 int는 주 (무효)에서 이번 주말부터 주요 변경하는 것입니다 그래서 명령 줄 인수를 탄생 될 것입니다. 일단 당신이에서 정말 세련된 가서 당신은 정말 trippy 프로그램을 작성 할 수 있습니다 등 위와 넘어 여기이 한 기능 중 일부는 우리가 지금까지 수행하지만 모든 아주 강력했습니다. 그래서 우리는 화면에 이것과이 둘 게요, 우리는 월요일에 표시됩니다. [CS50.TV]