[음악 재생] 데이비드 J. 마란 :이처럼 신입생 세미나 오늘. 그래. 밖으로 그래서 매우 비오는. 이 수요일에 발생하는 경향이있다, 그러나 더욱 기회 질문에 대한 오늘. 그래서 실제로 시작하자 단지 순간에 필름. 그러나 우리는 언제나처럼 성대하게 시작합니다. 이것은 CS50이며,이 주 (4)의 단부이다. 만약 당신이 봤어한다면 TV 나 영화에있어서 일부 컴퓨터 전문가가 그리고 경찰, 또는 연방 수사 국 (FBI), 또는 기관 일부를 잡으려고 노력 상대, 글쎄, 당신은했습니다 아마 "강화"표현을 듣고 이에 그 기술자 든 마술 무한히 확대됩니다 범죄자를 볼까지 신분 또는 번호판 번호 거울도 쉬머에 또는 다른 사람의 눈의 반짝임. 그래서 참의가 살펴 보자 할리우드에서 몇 등의 장면. [비디오 재생] -OK, 지금의 당신에서 좋은 모습을 얻을 수 있습니다. 그것을 꽉 잡아라. 그 뒤로를 실행합니다. - 잠깐만. 오른쪽으로 이동합니다. 저기, 그 동결. - 전체 화면. -OK, 그 동결. 당신은, 그에 것까지 -Tighten? 그에에 - 벡터 뒤 바퀴에 의해 사람. 여기이 자리에 -Zoom. 적합한 장비를 가진 - 이미지 확대 및 날카롭게 할 수있다. 그게 무슨입니까? - 그것은 향상 프로그램입니다. 그 최대 명확한 당신은 - 수? - 난 몰라. 현실을 제고하자. -Enhance 섹션 A6. - 난 세부 사항을 개선, 그리고 - 나는 있다고 생각 향상시킬 수있을만큼, 내 화면에 놓습니다. - 난 그녀의 눈에서 반사를 강화. - 가자는 통해 실행 있어요 비디오 향상. -Edgar,이을 향상시킬 수 있습니다? 잠시만 요. 이 반사에 노력하고 나 빨리. - 누가의 반사. -Reflection. 남자의 얼굴의 반사 저기입니다. -THE 반사. 반사 저기입니다. 거울에 -Zoom. - 당신은 반사를 볼 수 있습니다. 여기에서 이미지를 향상 - 수? 당신은 바로 여기에 그 향상도 되나요? 당신은 그것을 향상도 되나요? 당신은 그것을 개선 할 수 있습니까? 우리는이 향상 - 수? 당신은 그것을 향상도 되나요? 두 번째에 꽉 잡아라, 나는 향상됩니다. 문에 -Zoom. 10 배속. -Zoom. 에 -move. - 더. 잠깐, 중지합니다. -그만. 그것을 -PAUSE. 우리에게 75도 - 회전 수직 주위하시기 바랍니다. -그만. 부분으로 돌아 가기 다시 문, 약. 비트 맵 수있는 이미지 인핸서를 있냐? 이봐, 어쩌면 우리는 프라 딥을 사용할 수 있습니다 센 방법은 창으로 볼 수 있습니다. -이 소프트웨어는 예술의 상태입니다. 년 - 고유 값이 꺼져 있습니다. 오른쪽 가진 - algorithm--의 조합 - 그는의 촬영 제거 다음 단계로 알고리즘, 나는에 사용할 수 있습니다 이 사진을 향상시킬 수 있습니다. 에 -lock 및 Z 축 확대. -Enhance. -Enhance. -Enhance. 꼼짝 마 및 향상시킬 수 있습니다. [END 재생] 데이비드 J. 마란 : 좋아, 그래서 그 모든 사실은 단어입니다. 그들은 단지에 함께 중독있어 실제로 현명한 아니다 방법. 그것을 좋아하고, 사실, CS50 및 코스 TV와 영화를 많이 파괴하는 경향이있다 당신을 위해. 때 그 컴퓨터 전문가 때문에 용어를 잡았다과 말 같은 멋진 것들 고유 벡터 및 Z 축, 다른 임의의 개수 실제로 더 많은 전문 용어, 그들은 정말 모인 것 즉 함께 모든 너무 자주. 우리의 희망 중 하나가 인 즉, 촬영 과정의 부작용으로 이 같은 의지 더 많은 사람들이 세계는 사실에 무게를 할 수 그냥 지금 약간 영향을 품질과 그 영화의 정확도? 사실,의​​ 현실을 살펴 보자. 그래서 여기의 직원 사진입니다 메리, 우리의 교육 동료 중 하나. 그리고 그녀가 가정 뭔가 의심. 그럼에도 불구하고,의 희미한 빛있다 그녀의 눈에서 증거의 일부 조각, 또는 그녀의 안경의 반사에. 음, 우리는 영화로 정확하게 할 경우 우리는 확대와 "강화"하며, 제안, 이 얼마나 많은 정보입니다 마리아의 얼굴에 당신은 이미지를 캡처 할 때 그 원래의 해상도. 그리고, 사실, 이러한 점을 볼 수 있습니다. 그리고 다음은 무엇인가이다 라는 픽셀, P-I-X-E-L-S, 이는 일반적으로 단지 정사각형 그 이미지를 구성하는 점이다. 그리고 다시 하루에, 실제로도 오늘의 LED TV를 일부와 오늘 나 LCD TV는, 당신이 가지고있는 경우에 객실에서 또는 가정에서 하나, 당신은 슈퍼 가까이 이동 한 경우 그것은 다소 오래된 TV가있어 특히, 당신은 아마 이러한 점을 볼 수 있습니다 그 이미지를 구성하는거야. 그리고 더 이상 없다 이 이상의 정보를 제공합니다. 우리의 의미에서, "강화"있었다 이상과 종류의 일을 매끄럽게 가지, 일종의 어떤 추론 색상은 마리아의 눈 옆에 있어야한다 그래서 실제로 그렇게 픽셀 화 아니다. 하지만 확대 계속하면,이 그녀의 눈에 나쁜 사람이다. 그런 모든입니다 정보를 우리는 가지고있다. 당신은 만들 수 없습니다 무에서 정보를 제공합니다. 단지 유한있다 이 비트 수. 문제 세트 4, 그렇게 당신은 기회를 세계의이 종류의 재생합니다. 문제 세트 4, 당신은을 살펴볼 것이다 그래픽, 법의학의 세계, 실제로 코드를 작성 그 잃어버린 이미지를 복구합니다. 당신은 코드를 작성하는 것 그 기존 이미지를 조작 궁극적으로 무엇을 이해 후드 아래에 일어나고. 그리고, 그것은 실제로 야 밝혀 모든 복잡하지. 예를 들어, 우리가 원한 웃는 얼굴 어디를 나타냅니다 이 검은 픽셀, 또는이 검은 점, 물론, 우리는 간단하게 나타낼 수 있습니다 그들은 진정으로 비트 맵. 그리고 만약 당신이 이제까지 것을 들었다 표현의 비트 맵, 아마도 지금을 시작 좀 더 의미 오늘. 우리는 이미 비트가 무엇인지 알고있다. 그것은 0 또는 1이다. 그리고지도는 뭔가 종이처럼 그 당신에게 방향을 제공하고있다 어쩌면 x 축과 y 좌표의 격자. 그래서 여기에 비트 맵이다. 이는 비트 맵의 이에 1 명백하게 흰 화소를 나타내는 것, 및 0 검은 픽셀을 표현하는 것입니다. 그러나 우리는 확실히 주위 플립 수 있습니다. 그것은 정말 문제가 그렇게 우리는 일관성을 오래. 그리고 여기에 내부 binary--에, 어떻게 컴퓨터 메모리, 또는 내부 하드에있는 파일의 drive-- 당신은 저장할 수 웃는 얼굴 화상의 단순한. 그러나 우리는 무엇 물론, 이 이미지 부족? 색상, 오른쪽? 그것은 명백한 다음 단계 나 향상 색상이를 향상시킬 수 있습니다. 그래서 불행하게도 단 하나와 비트는 0 또는 1, 우리는 색상을 나타낼 수 있습니다. 즉 빨강, 파랑, 또는 수 블랙, 화이트, 또는, 녹색, 분홍색, 또는 색상의 쌍. 그러나 단순화하기 위해, 우리는거야 단지 흑인과 백인 가정합니다. 그래서 논리적으로 우리가 경우에 필요합니까 우리 이미지의 색상을 구현하려면? 우리는 무엇을해야합니까? 여기에 제한 요인 경우처럼 즉, 하나의 비트 만 할 수있다 두 상태, 0 또는 1, 백색 대표 또는 검은 색, 무엇을 하시겠습니까? 청중 : 더 많은 데이터. 데이비드 J. 마란 : 더 비트, 그래, 더 많은 데이터, 더 많은 비트. 그리고, 참으로, 그 정확히 방법 컬러 이미지가 표시됩니다. 하나의 비트를 사용하기보다는, 0 또는 각 픽셀에 대한 1, 각각의 점, 당신은 배수를 사용합니다. 어쩌면 어쩌면, 더 일반적으로, 8을 사용 문제 설정에서, 실제로 24 사용하고, 4, 당신은 파일을 재생합니다 일반적으로 24 비트를 사용하는 형식입니다. 하지만 대부분의 아마 JPEG 파일을 잘 알고. 당신은 이제까지 촬영 한 경우 귀하의 휴대 전화에있는 사진, 또는 업로드 또는 뭔가를 본 페이스 북이나 플리커 (Flickr), 임의의 숫자 사진 기반의 웹 사이트, 당신은했습니다 아마 이전에 JPEG 이미지를 볼. 그리고이 파일 밝혀 형식은 우리가 PSET 4에서 사용하는거야 이에 당신이거야 이미지를 복구해야 나는 실수로 삭제 한 것을 카메라에 손상 메모리 카드, 당신이됩니다. 그리고 그것은 밝혀 그 비록 JPEG 꽤 sophisticated--입니다 훨씬 더 복잡한있어 검은 색과 흰색 점 이상 이 때문에 우리는 잠시 전에 보았다 실제로 멋진 알고리즘이 그래서, JPEG 압축하는 데 사용됩니다 당신은 정말 좋은 가질 수 있습니다, 화질 만 사용 상대적으로 적은 비트. 그리고 우리는 다시 올 것이다 오래 전에 압축. 그것은 처음 밝혀 JPEG의 image--에서 3 바이트 아무리 당신이 사진을 촬영 한 내용을 동행입니다 값은 255, 216, 255이다. 즉, 경우 단지 비트의 패턴을 참조하십시오 세 가지로 여기에 표시 바이트, 또는 24 비트의 총 높은 확률로 당신은을 추론 할 수있다 당신이 처음 세 그것을보고 있습니다 JPEG의 바이트. 그리고 이것은 무엇 알려져있다 JPEG의 서명으로. 파일 포맷의 많은 시작이 경향에서 0과 1의 특정 패턴, 그 Windows 및 Mac OS 및 아이폰 OS 그래서, 안드로이드 알고 파일의 어떤 종류의 사람들 소위 파일 외에, 아르 확장 파일을 많이 가지고있다. 당신이 .JPG 경우, 그건 컴퓨터에 다른 단서. 그래서 지금이보고하자 더 기술적으로 조금. 우리는 소수를 알고 시스템은 9 0입니다. 우리는 바이너리가 0과 1 알고있다. 그리고 당신은 PSET 다시 생각하는 경우 0, 우리는 당신이 씨름했다 조금, 뭔가 진수라고, 당신은 16 자리가 어디에서, 대신 10 대신 2. 그리고 그 숫자, 규칙에 따라, 다음 9, 0 ~입니다 f는 무엇을 나타내는 F를 통해 그냥 빨리 정신뿐만 진수, 확인? 그래서, 15. 그리고 단지로, 10을 표시해야 내가 준 순서의 성격. 그것은 단지 임의의 규칙이다 그러나 매우 표준이다. 우리가이 패턴을 보면 그래서 세 가지의하자 bytes-- 그냥 그것을보고 시작 방법에 부합하는 방식으로 일반적으로 컴퓨터 과학자 보고 파일에 대해 생각합니다. 당신은 확실히에 대해 생각할 수있는 0에서 파일과 1, 진수, 그러나 실제로, 우리는 이진을 사용하는 경향 또는 더 일반적으로 hexadecimal-- 다시 PSET 0. 그래서 내가 제안하자 그 255, 216, 255 0과 1의 바로 이러한 패턴입니다. 그리고 당신은이 있는지 확인 할 수 있습니다 당신 주 0에서 수학을하고 싶다. 하지만, 지금은 그냥 가정 있음이 참으로 올바른 것입니다. 난 그냥 세 소수를 다시 작성했습니다 세 이진 값으로 숫자. 지금 내가 할거야 것은 그냥 공백을 추가, 단지 가독성을 위하여. 그리고주의 사항, 난 그냥 갈거야 일을 떨어져 이동합니다. 그래서 전, 후, 전, 후. 나는 다른 흥미로운 아무것도하지 않고있어 너무 물건을 확산보다 그 통지 팔의 각 세트 비트는 현재 4 비트의 두 가지이다. 이 16 진수 때문에 유용 특히 유행이다 때문에 각 16 진수 0에서 F, 또는보다 구체적으로는 0 내지 15, 표현 될 수있다 정확히 4 비트와 함께. 즉, 16 진수로 당신의 경우 그냥 0000의, 0을 표현하고자, 네 제로. 그리고 당신은 15을 표현하고 싶다면, 이 4 비트 인 1111입니다. 그리고 당신은 수학을 할 경우, 이 사람의 장소 인 경우, 이, 16S의 장소입니다 그 얘들 아 줄 것 오히려 그 무슨 죄송합니다 이러시면, 이진, 즉 15 당신에게 줄 것, 사람의 장소, 조로 장소, 발로과 형상을 장소. 그래서 내가 그 것을 제안하자 왼쪽 4 비트 세트 우리가 F를 호출하는거야 것입니다. 그것은 가장 큰 수의 당신 4 비트와 함께 나타낼 수 있습니다. 그리고 우리는 이미 진수 알고, F는 16 진수로 가장 큰 숫자입니다. 우리는 거기에 또 다른 F있어 두 저기 더. 그리고 지금은, 단지 믿음에 걸릴 나는 수학 권리를 수행했는지 그 좌측 절반 그 비트, 1101, 16 진수 D와 같은 것입니다. 그리고 오른손, 1000, 단지 8입니다. 쉽게 하나의 오른쪽 볼? 8 represents-- 오른쪽입니다 그 형상을 위 아래. 그래서 우리는 형상을 열에 하나가 그리고 발로, 조로 또는 그들에 아무것도. 그래서 지금 더 통상적으로, 인간은 경향 이 같은 16 진수를 작성하려면, 당신은, 그들을 함께 뭉​​개 버려 다음은 0x로를 접두사. 이 이외의 아무 의미 human--에 시각적 단서 여기에 16 진수 value-- 때문에 온다 그렇지 않으면 분명하지 않을 수 있습니다. 어떤 것을 궁극적으로 말을하는 것입니다 0과 1의 패턴, 또는 16 진수의 패턴 숫자 동등 당신이있어 그 찾고 시작할 것 문제 세트 4는이 항아리입니다 그리고 문제 세트 4 스펙 안내합니다 더 detail--이 통해 하지만 비전의 종류로 실현 이 먼저 눈에 볼 수 있습니다 당신이 많이보고 시작하는 것입니다. 사실, 심지어 GDB에서, 디버거 우리는 월요일에 소개 댄은 PSET 3, 가고 소개 종종 당신에게 진수 값을 표시합니다 단지 그들이 더 많은 경향이 있기 때문에 진수 또는 이진보다 기존의 컴퓨터의 세계. 이제 컨텍스트에이를 만들어 보자. 많은 당신이 기억 수도의 무엇에서 온 한, 여기에 사진? 비스타, 그래서 그 이전보다 즉, Windows XP는이 데뷔를했다. 그래서이 아름다운 풍경이다. 그리고 사실, 당신은 online-- 주위를 찌를 경우 나는 Wikipedia 기사라고 생각, 특징 사람이 매우 놀랍게도 나갔다 발견 된 세​​계에서이 위치 설정 자신의 카메라에 정확하게 오른쪽 place-- 이 오늘은 그때 엔 보이지만, 정확히 동일한 설정이다. 이 이미지는하지만, 파일에 형식이라는 비트 맵, B-M-P. 그리고 우리는 슈퍼 걸릴거야 그게 무슨 뜻인지에 순간적. 그러나 비트 맵은 단지 다른 방법입니다 대표 이미지는 여전히 화소를 이용 0과 1의, 궁극적으로. 그러나 빠른 눈에, 그것은이 더 흥미로운 서명 파일의 시작. 그것은 단지 세 아니에요 바이트, 오히려있다 바이트 패턴의 전체 무리 그 의미를 소정했다. 예를 들어, 어딘가에서 비트 맵 이미지의 처음 몇 바이트 의 크기가 될 것입니다 이미지의 폭, 화상의 높이 때문에 유용한 메타 데이터가됩니다. 유용한 정보가 포토샵 또는 그래픽 사용중인 프로그램 실제로 신경 수 있습니다. 이에 따라서 더 문제 4를 설정하지만,이 말을 아니라 하루의 끝에서 당신이 사용하고있는 모든 파일 형식 years-- 마이크로 소프트 워드 파일, 번호 파일, 엑셀 파일, 파일 형식 중 임의의 개수 그 몇 가지가있을 수 있습니다 알려진 파일 확장자 후드 아래에 단지 0과 1입니다. 그리고 인간은 결정 규칙은 무엇인지, 무엇을 0과 1의 패턴을 나타냅니다 워드, 엑셀 파일 대 파일 다른 파일 형식의 수 대. PSET 4 그래서, 당신은있을 것이다 기회는 그와 함께 재생합니다. 그러나 무엇 그것은 구조체를 의미. 이것은 지금 실제로 좋은 SEGUE입니다 단 몇이로 C, 의 추가 기능이 우리는 아직 보았다하지 않았습니다. 그것은 아주 작은 언어 중 하나입니다 C에 대한 좋은 기능은 구조체이다. 예를 들어, 경우 하자 represent-- 싶어 당신이 변수를하고 싶어 말을 그 일부 프로그램에서 학생을 나타냅니다. 어쩌면 당신은 과정을 기록했다 등록 프로그램, 또는 코어 쇼핑 도구, 또는 그런 일. 관련 데이터의 조각은 무엇입니까 마음에 오는 학생에게? 학생처럼 값 어떻게 표현? 그래? 당신은 학생으로 이름을 가지고있다. 일반 학생은 다른 무엇을해야합니까? 청중 : [들리지] 데이비드 J. 마란 : 그래서, 죄송합니다. 청중 : 나이. 데이비드 J. 마란 : 나이 생일 동등하게, 네. 그 밖의 무엇? 청중 : ID 번호? 데이비드 J. 마란 : 어쩌면 그래서 ID 번호, 전화 번호, 어쩌면 기숙사, 또는 집, 대학, 또는 그런 일이나. 데이터의 조각 임의의 수의 그 당신은 당신의 연락처 목록에있을 수 있습니다 학생을 정의 할 수 있습니다 것입니다. 우리가 코드에서이 작업을 수행하고 싶어한다면, 우리는이 같은 간단한 일을 할 수 있습니다. 우리는 그래서 프로그램이있을 수 있습니다 이,의 말 INT 주 (무효)를 할 수 있습니다. 그리고 난을 표현하려면 내가 예를 들어있을 수 있습니다 학생, 그 학생의 이름이라는 문자열, 그 학생을위한 기숙사라는 문자열, 어쩌면 INT는 학생 ID를했다. 내가 문자열을 사용하고 있기 때문에, 나는 CS50.h.을 돌아가서 올려 필요 어쩌면 내가 STDIO.H을 필요 해요. 그래서 나에게 선제 사람들을하자 나는 해요 지금이 student.c를 호출하는 것 이 저장합니다. 그리고 지금은 뭔가를 할 수 이러한 변수. 그리고 우리는 그냥 쓰는거야 이 의사 코드에 주석으로, 그것은 흥미로운 아니기 때문에 우리는 지금 무엇을. 좋아, 그럼이 프로그램입니다 어떻게 든 학생을 저장합니다. 나는 경우 무엇을 하시겠습니까? 나는 두 학생을 저장할? 그래서 내 첫 번째 본능 것입니다 잠깐, 모든 권리 될, 나는 다른 학생이 있다면 내가 왜하지 그냥 문자열 이름 2, 문자열 기숙사 2 할, INT의 ID2. 그리고 우리는 사라 했어 이 길 앞에 아래로 그리고 보이는 우리의 솔루션 것이었다 hackish 복사 붙여 넣기 가지가 될 여기에 작업? 청중 : 배열입니다. 데이비드 J. 마란 : 그래, 우리는 배열을 사용할 수 있습니다. 오른쪽이 매우 빠르게 다루기 힘든된다. 당신은 임의의 정렬이 이 모든 변수를 명명 시작합니다. 그리고 당신은, 인간은 계속해야 그 확인의 NAME2의 대응을 추적 dorm2과 ID2에 해당합니다. 그것은 단지 엉망이된다. 그래서, 많은 쉽게 몇 주 전부터 기억, 단지라는 문자열 이름을 갖는 것 어쩌면 우리에게 그 세 가지를 제공합니다. 그리고 어쩌면 우리는이 문자열 기숙사가 이들 세 가지 또는 상수, ID를 int로 그 세 가지가 있습니다. 그러나 지금이라도이 느낌 약간의 실수, 맞다. 우리는 아직 학생에 대해 얘기하고 정말 낮은 수준에 거주하고있어 구현 세부 사항. 학생은 이름과 기숙사 및 ID입니다. 왜 난 그냥 변수를 선언 할 수 없습니다 학생이라고하고 부르심. 그리고 나는 다른 학생을 원하는 경우, 왜 난 그냥 티셔츠를 호출하지 않습니다. 아니면 전체 무리를 원하는 경우 학생들, 왜 그냥하지 않습니다 내가의 전체 클래스가 있다고 가정 학생, 그리고 그들의 세이다. 즉, 내가 왜 올 수 없습니다 라고 내 자신의 데이터 형식, 최대 학생, 내부에있는가 이름, ID입니다 기숙사입니다, 다른 필드의 임의의 수이다. 그리고 그것은 당신을 끈다 정확하게 작업을 수행 할 수 있습니다. 그래서 C는 구조체이라는 기능이 있습니다. 즉, 언어 기능의 그 우리가 정확히이 일을 수행 할 수 있습니다. 나는 앞서 갈거야 및 structs.h을 열어 우리를보고가는 곳 학생의 정의를 다음과 같습니다. 그것은 밝혀 -이 하나도이다 ID를 포함하는 하나 이상의 단순 전 순간. 당신은 마련하려면 당신의 집에서 데이터 유형, 그리고 int로 추가하고, 문자와 존재와 모든 다른 사람을 떠 당신은 문자 그대로에 의해 그렇게 할 수 있습니다 형식 정의 구조체를 작성, 다음 몇 가지 중괄호, 이는 내부 당신 당신이 원하는 변수를 나열 이 새로운 사용자 정의 데이터와 연관 이름과 기숙사처럼 입력 다음 중괄호 후 새 데이터 형식에 이름을 지정합니다. 그래서, 예를 들면, 학생. 그리고 무엇 지금 이것에 대해 좋은 것은이다 우리가 해당 코드를 보면, 먼저 대회, 모든이를 배치하는 것입니다 파일이라는 것을 도트 시간에, 우리가하지 않은 헤더 파일, 너무 자신을 사용하기 시작했다. 그러나 우리는 시작하는거야 지금 꽤 사용. 그리고 우리는 이것으로 무엇을 할 수 있는지, 궁극적으로, 이러한 코드 몇 줄의 정확히를 선언한다 데이터 형식, 학생. 그리고 지금의 그것을 사용할 수 있습니다. 지금에 갈거야 파일 structs1.c을했다. 그리고 이제 살펴 보자 여기에 몇 가지 특성. 그래서 여기까지 물건입니다 대부분 잘 알고, 우리는거야 무슨 일이 아니다 돌아와 단지 순간에 익숙한. 물론 이것은 내 자신을 포함한다 뿐만 아니라 새로운 헤더 파일, PSET 3를 제외하고, 리콜, 우리는 helpers.h 있습니다. 그래서 당신은 #INCLUDE helpers.h을 호출 할 수 있습니다. 왜 그러나 나는 따옴표를 사용하고 있습니다 대신 각도 브래킷? 때 나는 그들 사이에서 선택할 수 있습니까? 거의 항상 나는 것 꺾쇠 괄호를 사용합니다. 그리고 나서, 모든 급격한에 라인 여섯 나는 따옴표를 사용하고 있습니다. 이유가 될 수 있을까요? 그래? 청중 : [들리지] 데이비드 J. 마란 : 즉, 무엇을 실제입니까? 청중 : 그것은 당신의 IDE에서입니다. 데이비드 J. 마란 : 그래, 그건 내 실제 IDE에서입니다. 그리고, 때문에 이제 IDE에 연연하지 말자 그건 그냥 내가 사용하는 도구입니다. 그건 내 현재에있어 디렉토리, 특히. 그래서 structs.h 내 자신의 파일입니다 IDE에 설치되어 있지, 운영 체제 그 자체, 오히려 내 현재 디렉토리에 있습니다. 그래서 규칙은 당신이 원하는 경우입니다 자신의 헤더 파일을 포함하는, 당신은 큰 따옴표를 사용합니다. 우리는이 일을 호출하는 일 라인 8, 일반적으로? 이것은 무엇입니까? #DEFINE 뭔가. 이것은 바로, 상수를 나타냅니다? 당신을 갖고 싶어 프로그램의 가치 당신은 전체를 사용하는 것이 시간의 무리, 그것은이다 , 그것을 고려하는 것이 관례 좋은 해시 기호, 선언 모두, 규칙에 따라, 다음, 정의 그렇지 비록 word-- 대문자 꼭 필요하지만, 그것은 인간의 규칙이다 상수를 대문자로 그들은 밖으로 뛰어 그래서 당신이 공간을 visually--에서와 다음 원하는 값은합니다 그 상수의 이름에 해당. 세미콜론,하지만 단순히 거기에 그 패턴을 따른다. 그래서 나는이 실제 코드에서하고있는 중이 야. 그럼 살펴 보자 여기에 메인 프로그램. 라인 12에서 나는 때문에 structs.h을 포함했다, 지금에 마술이 내 처분 새로운 데이터 유형입니다. 난 그냥, INT에 액세스 할 수 없습니다 숯불 및 플로트, 문자열, 파란색 등이 있습니다. 지금에 액세스 할 수 있습니다 학생 데이터 형식입니다. 라인 12, 나는 두를 결합하고있어 그래서 하나의 사용자 정의 데이터 유형과 두 ideas-- 배열을 사용하여. 그리고이 프로그램의 경우에 실제로 지원하려는 세 가지 다른 학생들 내 프로그램에서, 나는 나에게 변수를 줄 말을 간단하게 할 수 있습니다 이들 각각라는 학생, 유형 학생,의 인 내 사용자 데이터 형식이다. 그리고, 특히, 줘 내 배열에있는 사람들의 세. 그래서 지금 우리가이 프로그램에해야합니까 무엇? 여기에 단지 루프 반복하는 용의 그 때문에, 0-3 학생의 값은 무엇. 난 그냥 사용자에게 메시지를 표시하고 있습니다 나에게 학생의 이름을 지정합니다. 그리고 라인 (17)에, 우리 대부분 익숙한 라인. 우리는 우리의 오래된 친구가 오른쪽에는 getString. 구문의 어떤 조각 분명히 새로운 당신이 전에 C 프로그래밍 적이없는 경우, 및 구조체를 사용한 적이? 그래? 청중 : .NAME. 데이비드 J. 마란 : .NAME. 그러나 이것은, 도약을 너무 많이하지 않습니다 지금 학생들은 I를 괄호 때문에 당신에게 i 번째 학생을 제공합니다. 그리고 당신은 다이빙을하려는 경우 그 구조의 내부, 당신은 단지 하나의 기간을 사용하고 다음 내부 변수의 이름, 또는 그 내부의 특성 당신은에 접근하려고합니다. 마찬가지로 다음, 나는 그 메시지를 표시하는 경우 사용자는, 나에게 학생의 기숙사를 제공, 당신은 유사하게 그 저장할 수 있습니다 내부 기숙사 변수에 문자열 그 학생의 구조. 그리고 지금 상황이 조금 공상을 얻을. 그리고이 보일 것입니다 아마도 많은 꽤 빨리. 하지만 당신은 PSET이 훨씬 더 볼 수 있습니다 4, 그래서 지금에 그냥 눈하자. 그것은 선 (23)을 통해 밝혀 38, 당신은 내가 아마 뭘하는지 생각하십니까? 내가 코멘트를 삭제했습니다 오늘날, 그러나 버전 온라인 코드 참조는 모든 의견을 가지고있다. 나는 일을 할 어떤 것입니까? 청중 : 모든 사용하여 파일을 저장 사용자가 입력 한 정보. 데이비드 J. 마란 : 그래, 정확하게, 이는 새로운 방법은 우리는 두 가지를보고 있다는 것을, C의 또 다른 특징, 이에 나는 내 자신의 파일을 만들 수 있습니다. 지금까지 거의 모든 프로그램 서면으로 작성했습니다 당신은 무 상태이다. 즉시 실행이 이루어집니다로, 그것 뿐이다. 더 메모리 또는 그것의 기억이 없습니다. 저장된 어떤 파일이 없습니다. 하지만 당신이 원하는 경우 이 입력을 저장 게임이나 프로그램에서 같은 일이 이처럼, 우리가 그렇게 할 수 있습니다 밝혀졌습니다. 그리고 당신이 더 많은 것을 볼 수 있습니다 PSET 4 절에서. 하지만이 라인 (23) 본질적으로 students.csv라는 파일을 생성한다. 그리고 당신은 전에 본했을 수 있습니다. 이전에 CS를 공부 적이없는 경우에도, CSV는 쉼표로 구분 된 변수입니다. 그것은 매우 가난한 사람의처럼 Excel 파일의 버전, 이는 그것이 개방 될 수 있음을 의미 Excel에서 애플의 숫자에, 그것은 행과 열이 있습니다. 그러나 독점이 아니다 마이크로 소프트 나 애플과 같은 형식입니다. 그것은 분리 그냥 쉼표의 우리는 순간에 볼 수 있습니다 값. 그리고 그냥 추측을. 아주에서 라인 (23)에서, 결국, 내 두 번째 인수 이라는 새로운 기능 F 파일 열기 개방 승이다. W 무엇을 나타내고 있는가? 그래? 청중 : 그것은 당신이 파일에 쓸 수 있습니다? 데이비드 J. 마란 : 그것은 할 수 있습니다 당신은 파일에 기록. 그래서 변종의 커플이있다 것을 우리는 여기에 연결 할 수 있습니다. 하지만 당신은 그냥 읽고 싶은 경우 파일, 즉보고있다 와, 메모리에 당신을 읽어 다만 인용 맺다 "R"을 사용합니다. 당신은 쓸하려면 파일, 당신은 "W"인용을 끝내 따옴표를 사용합니다. 또한 추가 그리고 다른 몇 가지 당신은 기존 파일을 수정하려면. 이제 우리는이를보고 계속거야 24 행으로 일이, 우리는 다시 올 것이다. NULL, 그것이 밝혀입니다 특수 값이 특정 기능에 의해 반환 될 수있다 뭔가 wrong-- 간 경우 파일이 존재하지 않는 경우, 당신은 메모리가 부족 한 경우, 다른 오류 또는 무리. 하지만 지금은, 그냥이 있다고 가정하자 다만 기존의 오류 검사입니다. 여기에 라인 (26)에, 나는 반복 해요 0에서 모든 학생들을 통해 3. 그리고 이것은 일종의 종류 새로운 기능, fprintf와, 하지만 그냥 추측을. printf와는 인쇄 경우 포맷 된 문자열, fprintf와 아마 무엇을 의미합니까? 청중 : 파일로 인쇄합니다. 데이비드 J. 마란 : 인쇄 파일 형식의 문자열입니다. 즉, 추가로 무엇을의 F 수단 파일이다. 그리고 새로운 첫 번째 인수는 있어야한다 파일을 나타내는 변수입니다. 그런 다음 우리는 단지 형식이 단지 printf와 같은 문자열입니다. 심지어이 생각 구문이 바로, 새로운 학생의 이름을 연결 수단 학생 기숙사에-꽂은 다음 FCLOSE으로, 파일을 닫습니다. 그리고이 새로운 lastly-- 우리는이에 돌아올 것이다 내가 자유롭게있어 long-- 전에 이유로 학생 그가 위까지 일어났다. 그러나 우리는 돌아올 것이다 그에게 long-- 전에 그 때문에하여 GetString가되는 방법이다 실제로 후드 아래 작업. 그럼 여기서 잠깐 살펴 보자. 내 디렉토리에 LS를 입력하면, 내가하지 않는 것을 알 수 , students.csv라는 파일이 그냥 거기에 존재하지 않습니다. 지금이 프로그램을 컴파일한다면, , 구조체-1을합니다. / 구조체-1, 내가 가서 입력거야 예일에서 버클리에 살고 앤디. 우리는 롭을 할 겁니다 사람 요즘 이어에 살고있다. 그리고의이 곳으로 올 수 있도록 이다, 생각, 마리아, 메이에 경우 내가 제대로 기억하고있다. 그래서 아무것도 일어날 것 같다. 하지만 지금은 LS를 입력하면, students.csv이있다. 의 앞서 열린 students.csv 가자. 이것은 다시 아주이다 경량의 파일 형식입니다. 하지만 단순히 규칙을 채택했습니다 것을 나는 여기에 두 행과 열을 가지고있다. 첫 번째 열은 사람의 첫 번째 이름. 두 번째 열은 학생입니다 기숙사, 또는 대학, 또는 집, 또는 이것 저것. 그리고 지금은이를 저장 한 영구적으로 파일. 그래서 모든 것을 흥미로운 아니다. 그러나 이것은 단지 디딤돌은 지금 정보를 지속 할 수있을 영구적으로. 그래서 지금 무엇보다 우리가 할 수있는 보자 이들과 다른 특징으로한다. 하지만 먼저, 질문? 즉, 많은, 그리고 그 빠른했다. 하지만 당신은 많이 볼 수 있습니다 PSET 4 개,뿐만 아니라. 그래? 청중 : 방식이 있나요 해당 파일에 이름을 계속 추가? 데이비드 J. 마란 : 좋은 질문입니다. 계속하는 방법이 있나요 해당 파일 이름을 추가? 네. 그리고, 사실, 종료하면 최대 파일을 재 개방 당신은 따옴표를 사용합니다 맺다 ""APPEND를 들어, 이는 단지 새로운 라인을 추가, 새로운 라인 또 다시, 정확하게. 좋은 질문. 다른 질문? 그래? 청중 : 당신이 실행하는 경우 프로그램 다시 지금, 그것은에 이름을 계속 추가 할 것 파일 또는 새 파일을 열 것인가? 데이비드 J. 마란 : 아, 좋은 질문입니다. 다시 오른쪽으로 프로그램을 실행 한 경우 지금, 어쩌면 새로운 이름에 입력, 이것은 파일에 추가 할 또는 파일을 덮어? 후자, 난 때문에 확장 모드를 사용하지. 그리고 난 그냥 맹목적이기 때문에 쓰기 위해 파일을 열어, 그냥 파일을 덮어 쓸 것입니다. 그래서 참으로 추가된다 할 필요가있을 것이다, 실제로 장기를 갖고 싶어 데이터베이스. 이제 CSV도 솔직히 유용 대한 같은 당신이 있다면 writing-- 우리는 결국이 나타납니다 나중에 때 학기 우리는 다른 목적을 위해 CSV를 사용합니다. 당신은 모든 사람들을 저장하려면 누가, 어떤 이벤트에 대한 등록 또는 학생에 가입 그룹 또는 그런 일, 이러한 종류의 데이터를 기억 형식의 슈퍼 편리합니다. 말 그대로 때문에, 나는 경우 이 파일을 다운로드했다. 내가 double-- 수 있으며, 의는 실제로 해보자 여기에 Excel 또는 숫자가있는 경우. 나는 마우스 오른쪽 버튼으로 클릭에 갈거야 또는 내 파일을 제어 버튼으로 클릭합니다. 으악. 마우스 오른쪽 단추로 클릭 또는 내 파일을 제어 버튼으로 클릭합니다. 자, 내 마우스가 협력하지 않습니다. 내가 갈거야 Download-- 그래서 여기에있는 모든 파일을 다운로드 그냥 그렇게 나는이 하나를 잡을 수 있습니다. 그리고이 작동하는지 보자 students.csv-- 처음으로 나는 활성화했습니다. 이제 그들은 내 연락처를보고 싶어요. 지금, 나는 등록해야합니다. 이 CSV를를 사용하는 것이 얼마나 쉬운 보는가? 예, 최신으로 유지합니다. 좋아, 이제 우리는 클래스에 대한 준비가 된 것입니다. 오, 확인, 새로운 무엇인가? 확인을 닫습니다. 즉 마법이었다. 좋아, 이제 우리는 업데이트해야합니다. 그리고 지금, 그것은 잊고 무엇 내가 원래 열린 파일, 하지만 거기 할까 .. 무엇을 우리는 간다. 좋아, 그럼 이제 우리는 엑셀 파일이 있습니다. 고맙습니다. 좋아, 내가했던 그래서 쉬운 부분이었다. 물론 나는 미리 설치 한 수 Excel 또는 숫자, 또는 어떤 프로그램. 하지만이 때문에, 좋은 지금은 조작 할 수 있습니다 표준 포맷 데이터. 그래서 지금하자 상황 우리가 중단 된 부분으로 전환 시작했다 마지막으로, 훈련 바퀴를 촬영합니다. 그러나 첫째로, 당신은하지 않았다 이 이전 점심을 참조 다시 화재 여기 무슨 일이 일어나고 및 뉴 헤이븐에서 캠브리지, 시타르의 얼음. 최대한 빨리 CS50s 웹 사이트에 가입 CS50 학생 및 직원에 가입한다. 그래서 우리는 훈련 바퀴를했다 월요일에 떨어져 follows--으로 문자열에서 선언 된 몇 시간 동안 CS50s 라이브러리. 그것은 수 있기 때문에 그리고 그것은, 좋은 데요 우리는 것으로 변수에 대해 이야기 완전한 단어와 문장 등이 있습니다. 그러나 그것은 존재하지 않는 문자열을 끈다. 그건 그냥 동의어, 또는 별칭입니다, 우리는 무언가를 만든 것으로 그 실제로 조금 더 기술 * 문자를했다. 그리고 실제로, 우리는 예를 보았다 월요일에 프로그램의 그것은 우리가 예상 아주대로 작동하지 않았다. 이것은 비교-0, 파일이었다. 그리고 경우, 그 비교-0을 호출 나는 월요일의 프로그램을 다시 컴파일 실행-0을 비교에서 엄마를 입력 다시 소문자로 소문자, 엄마. 이 프로그램은 내가 주장 다른 일을 입력 심지어 엄마, 모두의 생각 소문자, 시각적으로 동일하다. 그래서 짧은 대답은 무엇 이었습니까 컴퓨터가 생각하는 이유에 대한 두 문자열이 다른 이유는 무엇입니까? 그래? 청중 : [들리지] 데이비드 J. 마란 : 오른쪽. 그래서, 엄마, 처음 나는되고있는, 그것을 입력 내 컴퓨터의 어딘가에 저장 메모리하지만 다른 위치에 두 번째 시간보다 나는 엄마에 입력합니다. 지금은 확실히 최적화 할 수 있습니다. 컴퓨터가 스마트있을 수 있고 이봐,이 두 개의 문자열을 실현 그들은 동일한있어. 나 중복 보관하지 말자. 그러나 컴퓨터가 그렇게하지 ​​않습니다 최적화 당신은 그들이에 알려하지 않는. 그래서, 기본적으로, 그들은있어 다만 끝날 것 메모리에 두 개의 서로 다른 장소에서. 그리고, 때 더 명확하게하기 우리는 두 문자열을 비교 먼저 호출 된 S, 두 번째가 호출 T, 특히 내가 뭘했다 선 (13) 여기에 비교? 그래. 청중 : 그것은 메모리에있는 장소 변수를 가리 킵니다있다. 데이비드 J. 마란은 : 정확히, 나는이었다 메모리 장소를 비교 그들 변수에 지적했다. 그래서 구체적으로, 만약 엄마가 있었다 바이트 번호 1, 2, 3, 그리고 4-- 때문에 백 슬래시를 기억 0 끝에 모든 방법이 될 필요가있다. 그리고 엄마, M-O-M의 다른 인스턴스 어드레스 10, 11, 12, 13이었다. 나는 1 비교하고, 그 주소, 메모리의 해당 위치, (10)에 대해, 어느입니다 분명히 동일하지 않습니다. 1 10 없습니다. 그래서이 점에서 좋은 그것은 매우 간단합니다. 그러나로하는 한 문제이다 우리는 문자열을 비교 수없는 것. 그래서 fundamentally-- 이 낮은 수준에서, 당신은 구현하기를 원한다면 프로그램 비교 두 개의 단어가 사용자는, 품질에 입력했다 그들이 문자를 정렬 할 그냥 일반적인 용어로 문자, 우리는 분명히, 어떻게해야합니까? 그것은 단지에 충분한 아니다 그 두 개의 주소를 봐주세요. 우리는 무엇을 어떻게해야합니까? 그래? 청중 : 반복 문자열 [들림]. 데이비드 J. 마란 : 그래,하자 문자열을 반복. 의 루프, while 루프에 대한을 사용하자, 또는 당신은 대부분의 편안하고있어 뭐든간에. 그리고 우리는 어딘가에 두 개의 문자열을 가지고있는 경우에 메모리에의 각의를 살펴 보자 첫 번째 문자는, 각각의 두 번째입니다 문자, 다음 3, 제 4, 다섯 번째 우리는 히트까지 어떤 특별한 감시 가치인가? 청중 : [들리지] 데이비드 J. 마란 : 그래, 백 슬래시 영, 중 문자열의 어느 시점에서 우리는 그것 뿐이다 결정할 수 있습니다. 우리는 모든 단일 문자를 일치 적이 있습니까? 그렇지 않은 경우 false를 돌려줍니다. 이 경우, true를 돌려줍니다. 그래서 그게 무슨이 버전 정확히 프로그램의 비교 - 1.C는 않습니다. 그것은 동일 우리 그 난의 한을 제외하고 월요일 보았다 하지만 단어 string-- 제거이라도 그 모든 기능적 impact--이 없습니다 지금하고 있어요 제거하고 시각적 보조 바퀴, 그러나 명확하게 볼 수 있습니다 S t는 주소입니다. 그리고, 무슨 별의 별표 (*)를 나타내고, 주소, 그렇지 않으면 알려져있다 더 기술적으로 포인터. 그래서 난에 S를 선언 할 때 9 호선과의 char * s의 말, 그것은 나에게 문자열을 제공 의미하지 않는다. 즉, 나에게 그 변수를 줄 의미 삶의 목적 어드레스를 저장하는 것이다. 내가 넣어 약이기 때문에 그것으로 문자열의 주소입니다. 그리고 실제로,하여 GetString는 할 수 분명, 문자열을 반환하지 않습니다. 그것은 엄마를 반환하지 않습니다 백 슬래시 제로, 그 자체. 구체적으로 무엇을, getString에 않습니다 정확하게 반환? 청중 : [들리지] 데이비드 J. 마란 : 주소, 첫 번째 문자의 주소 일부 문자열은 얻었다. 그래서 지금 우리가보고있는 다시 특별한 키워드. 그리고, 나는이 앞에서 언급. 이것은 좋은 대회가 될 것입니다 우리가 지금 또 다시 볼 수있다. 나는 그것을 확인하기 위해 검사를 해요 S는 null가 아니고, T는 널 (null)이 아닙니다. 정말 내를 기반으로하기 때문에 빠른 언급 이전에, 하여 GetString하지 반환하는 경우 의미 할 수 무엇 주소 그러나 다시이다 N-U-L-L, 특별한 가치인가? 청중 : 오류가 발생했습니다. 데이비드 J. 마란 : 그것은 오류입니다. 문제가 발생했습니다. 그리고 무엇 일반적으로 특히, 일어날 수 strings--있는 수 있습니다 advance--에서 알 수없는 길이의 아마 컴퓨터 ' 메모리 부족, 어쩌면 당신은에 입력 긴 단어 나 문장 또는 큰 에세이를 붙여 다만 충분한 메모리가있다. 그래서하여 GetString는 반환 할 수 없습니다 모든 일의 주소, 그래서 그냥 아무 것도 반환하지 않습니다. 그리고 그것은 오류가 발생했습니다 말한다 특별한 NULL 값을 반환하여. 그것은 말하자면, 제로 주소입니다. 지금은 밝혀 C는 함께 제공 그 반복을 수행 기능. 우리는 이것을 구현 할 필요가 없습니다 루프 또는 while 루프 자신에 대한. 우리는 기능을 사용할 수 있습니다, 간결라고, 누구의, 빌려 저어, 또는 문자열 비교 인생의 목적은 정확히 그렇게하는 것입니다. 당신은 두 포인터, 두 개의 주소를 제공, 그리고 해당 주소로 이동합니다 다음에 대해 편지를 비교 품질에 대한 편지에 대한 편지, 사실 어떤 경우에만 중지? 직관적으로 빌려 저어해야 할 때 단지 명확 반복하는 수 정류장? 이 글은 백 슬래시 0 안타 때 하나 문자열, 어느 시점에서 결정할 수 있습니다 모든 것이 일치거나 차이가있다? 우리가 지금이 프로그램을 실행하고 있다면, 시도 우리의 작은 총액 게임, 그래서 비교-1, ./compare-1을하고, 소문자로 두 번 엄마를 입력합니다. 지금은 같은 일이다. 그리고 나는 다시 그것을 할 경우 소문자 그리고 아마 대문자. 지금은 참으로 구분 대문자와 소문자 사이. 그래서 모든 어려운 또는 마법,하지만 지금 설명 않습니다 무슨 일이 후드 아래에있는 것입니다. 그래서 더 우리가 추출 할 수있는 수업의이 종류에서? 그래서이 살펴 보자. 내가 가서를 작성하는거야 빠른 프로그램은 여기에 복사 - 0 불렀다. 그리고 지금의 앞서 실제로 가자 ,의 복사 - 0이 항아리하자 내가 여기에있어 무엇을 살펴. 내가 먼저 사용자에게 무언가를 말한다. 그럼 난 문자열을 얻을 나는 S에 저장. S가 동일한 경우 다음 나는 확인 NULL과 동일, 단지 1을 반환합니다. 그래서 이것은 단지 표준 오류 검사입니다. 흥미로운 아무 일도하지 않았다. 그리고 사실, 우리는 오류를 제거하는 경우 점검이 주 1 코드처럼 보이는 순간. 하지만 난을하기 시작했습니다 그것에 대해 더 작은. 이제 라인 16, 일주일 전에, 어쩌면 심지어 몇 일 또는 몇 분 전, 당신은 라인 (16)은 말할 수 변수라고 T를 생성 복사 그것으로이야. 그리고 그것은 완벽하게있어 합리적인 테이크 아웃. 하지만 지금은 더 정확하게. 라인 (16)에 무슨 일? 무엇 복사지고 오른쪽에서 왼쪽으로? 그래? 청중 : T는 S의 주소를 받고 있습니까? 데이비드 J. 마란 : 정확히, T S의 주소를 받고있다. 내가 가면 그래서, 지금 명확하게하기 다시 그 앞의 예에 그리고 난에 입력 한 일을 그립니다. 내가 입력 한 내용 in-- 여기의, 그리고 여기에 나는 어딘가에서 입력 한 무슨 메모리, 엄마와 다음 백 슬래시 나를 위해 추가됩니다 0. 내가 여기에 저장, 불러 이것은, 위치 1, 2, 3, 4에 있어요 이 S 현재의 것입니다. 라인 (16)에 경우에 따라서, 나는 내게 줄 말 다른 변수라고 T 및 저장 S의 가치에 어떤 여기에 저장됩니다 엄마하지 않습니다 오히려 단지 숫자 1. 우리는이 프로그램에 앞서 보면 그래서 지금, 무슨 일이 일어날? 그래서 거기에 알 이 기능을 사용하면 수도 시저에 대한 몇 시간 전에이를 사용하고, 또는 Vigenere, 아니면 전혀. 나는 난, 내 printf와 함께 주장 복사 (T)를 활용할 것. 첫 번째 줄 19, 빠른 정신에서 , T의 나 strlen 검사 길이를 확인합니다. 에 내가 원하는하지 않기 때문에 뭔가를 활용하려고 경우가 더 캐릭터가 없습니다. 사용자가 그냥 Enter 키를 누르 경우, 투자 할 것도 없다. 그래서 라인 (21)을하고 싶지 않아. 그래서 라인 (21)이 활용된다 이는 분명히 편지, T는? 청중 : M? 데이비드 J. 마란 : 그것은 보인다 처럼 복사는 하나? 청중 : M. 데이비드 J. 마란 : 어, M. 확인, 첫 번째 M 그래서, 난 것을 알 수 있기 때문에 , TOUPPER에 전달하는 당신이 그것을 본 적이 경우이다 단지 기능 입력으로 활용. T 브래킷 제로주는 의미 나 T의 제로 문자. 그리고 어떻게이 작업을 수행 사진 변화는 명확하게하는 방법? 어떻게 다시 작성 또는 변경 얻을 필요 s의 존중과 T와 엄마와 백 슬래시 제로. 청중 : [들리지] 데이비드 J. 마란 : 그래, 그래서이 하나 여기에 간단하게 이 항아리 해결 이러시면 변경 얻을 필요가 자본 M으로 변경 얻을 필요가있다. 하지만 지금의 뒷부분에 보면 프로그램, 나는 인쇄하는 경우 여기 청소로 S와 T, 무슨 일이 손목 시계 S와 T를 인쇄이 일어날 것. 그래서 복사 - 0, ./copy-0합니다. 내가 가서 입력하자 모두 소문자로 엄마에. 주목 모두 오리지널 사본은 대문자로되어있다. 왜? 음, S t는 모두를 가리키고, 만약이 경우, 메모리의 동일한 청크. 그리고 솔직히,이 점점 정말 사실 uninteresting-- 우리가 여기 주소 제로를 사용하고있다. 내 말은, 난 정말 상관 없어 여기서 물건은 메모리입니다. 죄송합니다 좀 너무 많이 삭제하고 있습니다. 하지만 난 정말 상관 없어 일이 메모리에있는 곳. 그리고, 실제로 무엇을 프로그래머에 대해 생각하는 경향이 당신에 대해 이야기 할 때이다 주소 또는 포인터 이 메모리의 어디에 무슨 상관. 가에 있다면 난 상관 없어 바이트 하나 억. 난 그냥이 있는지 관심 변수는 효율적이다 메모리의 덩어리 가리키는. 그리고, 이제부터가 아닌 애매한 임의의 메모리 주소에 걸쳐하자 단지 포인터를 그리는 시작 화살표로 포인터, 등. 그래서 t는 정말 무엇 s의 이 프로그램에 따라, 나는 T를 생성하는 방법 때문에 그것은 단지 두 개의 변수이다 같은 메모리 덩어리 가리키는. 그들이 어디에 그리고 우리는 상관하지 않습니다. 그래서 우리는 추상 떨어져 그 세부 수 있습니다. 그래서 내가 어떻게이 문제를 해결할 수 있습니까? 나는 복사본의 버전을 작성하려는 경우 이 프로그램은 실제로 복사 문자열을 만 대문자 복사, 그냥 직관적으로, 무엇을 가지고하는 것은 될 수 있습니다 우리의 솔루션에 성분? 청중 : [들리지] 데이비드 J. 마란 : 우리는 무엇을해야합니까? 청중 : 메모리 청크. 데이비드 J. 마란 : 우리가 필요로하는 메모리의 다른 덩어리, 오른쪽? 우리는 모르는 방법 반드시, 아직 그것을 할. 그러나 나는 종류의 너무 일이 필요 그 낮은 경우 원래 엄마 메모리의 여분의 덩어리에 끝납니다. 그리고 내가 복사본을 변경할 때, 나는 여기에이 복사본을 변경하지 않습니다. 내가 대신에만이를 변경하려면 복사하기 때문에 원본은 변경되지 않습니다. 그래서, 우리는이 작업을 수행하는 방법을 살펴 보자. 복사-1, 이미 가지고 댓글을 박탈하고, 하지만 온라인 주석. 우리는 대신 following-- 이러한 작업을 수행 라인이 동일, 나에게 문자열을 얻을 그것은 부르심. 하지만 지금의 우리의 가장 중 하나를 살펴 보자 복잡하지만 복잡도 마지막 잠시, 라인 (16)가 정확히이 일을합니다. 당신의 편안 경우 그래서 사진 우리가 drew-- 나에게 새로운 메모리 덩어리를 제공 그것으로 모든 것을 복사, 이제 우리는 코드가 번역하는 방법을 살펴 보자. 따라서 라인 (16), 좌측, 숯불 *의 T는 여기에 저에게이 상자를 제공합니다. 즉,이하는 모두이다. 오른쪽에, M의 ALLOC, 또는 malloc에​​, 슈퍼 공상 메모리 할당은,이다 단지 말의 암호 같은 방법 나에게 메모리의 덩어리를 제공합니다. 우리는 얼마나 많은 메모리가 필요합니까? 음, 큰 표현의 일종이다. 그러나의는 여기에 말하는 것을 볼 수 있습니다. 그래서 이것은 물론, 줄입니다 저 S의 문자열 길이. 그래서, 엄마는 어떻게해야 하는가? 그러니 세, 오른쪽? 엄마는 세 자입니다. 당신은 계산하지 않는다 백 슬래시 제로를 그것의 문자열의 길이에 대해 이야기 실제로 인간의 눈에 보이는 문자. 그래서 엄마는, 그래서 이것은 3은 나에게 있습니다. 그러나 지금은 1을 추가하고있어, 분을 기다립니다. 왜 내가 실제로 하시겠습니까 4 바이트뿐 아니라 3을 할당? 그래? 청중 : 센티넬 값? 데이비드 J. 마란 : 정확히, 그 감시 값. 백 슬래시 제로에, 나는 4 바이트의 총이 필요합니다. 그래서 길이 필요 문자열 더하기 1. 그리고 단지 좋은 measure--에 대한 심지어이 시스템에 있지만, 항상 나는 말하고 1-- 될 것 문자의 크기를 곱하면. sizeof 연산자는 밝혀 C에서 연산자 그 당신을 알려줍니다 의 바이트 수 특정 데이터 유형에 필요한. 그것은 배열 작동하지 않습니다, 일반적으로, 때로는 않습니다. 그러나 일반적인 경우에, 아니. 많은 바이트 방법 그러나 그것은 나에게 말할 것이다 밝혀 문자입니다 항상 1입니다. 그래서 1을 곱하는 것과 같다. 코드 그래서 슈퍼 애매보고 라인. 그러나이하는 모든 준다이다 나 메모리의 덩어리. 하지만 복사 할 보인다 그 메모리에 무엇? 아직. 그리고 라인 (22)에 내가 할 무엇, 그리고 23, 24, 25, 음, 난 그저 이렇게. 그리고 이것은 일종의입니다 지금 옛날 물건. 이 PSET 2와 같다 당신은 단지 물건을 이동하고 주위에 메모리에, 또는 오히려 문자열에. 그래서 0에 반복 해요 문자열의 길이. 그리고 i 번째 문자를 복사하고있어 t에서 i 번째의 문자로한다. 그리고 있기 때문에, 프로그래머가 만든 정확히 많은 바이트를 할당 할 수 있는지 내가 필요, 그것은 완벽 일대일 관계. 그리고 난에 엄마를 복사 새에 소문자. 그리고 마지막으로, 나는이 줄을한다. 그래서 효과가 아니라 여기에이 T를 활용합니다. 그래서 많이 흡수하지만합니다 당신은 단지 고려하는 경우 정말 무슨 일이야 후드 아래에 다만 이러한 이동 모든 즉, 주위 바이트 이 문제를 해결하기 위해 필요 단지 우리에게 기억의 덩어리를 제공합니다. 지금의 위험 압도적 인 나를 보여 드리겠습니다 대부분의 다른 한 예 이 하나를 제외하고, 동일 코드의 라인. 그래서이 해커 버전입니다 이 프로그램의, 당신이됩니다. 그러나 그냥 증류하자 그것은 무슨 일이 일어나고 있는지에. 라인 (24)이 T로 사용 브래킷 난의 브래킷 난을 가져옵니다. 지금, 나는이 변화하고 있습니다 훨씬 더 애매한 스타 T 더하기 1은 스타​​의 1을 더한 같습니다. 그래서 무슨 일이 일어나고 있는지, 왜 우리는 스타의 문자를해야합니까? 우리는 이전에 별을보고, 그리고 한 그것은 다르게 여기에 사용되는 것. 우리는 이전에 지금은보고 있어요, 문자 *를 보았다 처음에 스타, 그리고 괜찮아요. 그것은 우리를 밝혀 때문에 종류의 단지 추론 할 수있다 그 첫 번째에서 원칙은 무슨 일이 일어나고 있는지. 그러니 그냥 명확하게하기 위해, S는 무엇인가? 지난 주, 그것은 문자열이었다. 즉, 더 이상 충분하지 않습니다. 특히, S 무엇입니까? 청중 : [들리지] 데이비드 J. 마란 : 그것은 포인터입니다. 그것은의 주소입니다 첫 번째 문자 우리는에 입력. OK (확인), T는 무엇인가? 청중 : [들리지] 데이비드 J. 마란 : 첫 번째 바이트의 주소 T는, 메모리의 청크 재 할당. 그래서 밝혀 때 문자열까지에 0에서 반복 length-- 우선, 나는 때문에, 0에서 하차 시작 루프 일이 오래된 학교의. 그래서 그냥 간단하게하기 위해,하자 코드의 첫 번째 줄을 가정 정말이, 권리입니다. 난 제로 추가 0이면 뭔가 아마도 영향을 미치지 않을 것입니다. 그래서이 말은 무엇인가? 그것은 스타 밝혀 이러한 맥락에서 연산자 역 참조입니다 그냥 연산자, 이동 말하는 멋진 방법 다음 주소로. 그래서 S하다면 제 주소 메모리의 덩어리에 문자, *의 수단이 이동합니다. 그리고 우리는 그린했기 때문에 이와 같이 포토, 당신을 채택 할 수있다 정신 모델을 다음과 같습니다. 이 S이고, 당신은 * S *의 말한다면 종류의 낙하산과 사다리 등, 당신이 어린 시절부터 게임을 기억한다면, 그 화살표를 따라 이동처럼 주소. * T는 같은 것입니다. 그래서 여기에 시작, 그 덩어리로 이동합니다. 나는 단지에 그릴 수 없습니다 이 화면 그런 식으로. * T는 여기하는 것을 의미한다. 그리고, 루프는 그냥 여기에이 문자를 이동 말 여기에이 문자를 이동, 여기에이 문자를 이동합니다. 하지만 어떻게 그 증분을해야합니까? 난 그냥 삭제 한 것을 취소해야합니다. 이것은 일반적으로 불리는 것입니다 포인터 연산, 어떤 주소와 수학을 의미합니다. 만약,이 루프에 대한, 난을 증가 계속 s는 주소입니다 t는이다 주소, 난 그냥 1 계속 추가하는 경우, 그 단지 계속 전진을 의미, 및 전달, 및 상기 메모리에 전달. 그것은 옥스포드 스트리트 (Oxford Street)처럼, CS 건물이 켜져있는 거​​리. CS 건물은 33 옥스포드 스트리트 (Oxford Street)에있다. 그래서 만약 당신이 33 작업을 수행하는 옥스포드 스트리트 (Oxford Street) 플러스 1, 그 34 옥스포드에 당신을 제공합니다 거리, 다음 35 옥스포드 스트리트 (Oxford Street), 다음 36 옥스포드 스트리트 (Oxford Street), 무엇이든 그 건물은 실제로 - (존재하는 경우). 그리고, 그것은 우리가하고있는 전부입니다 여기 포인터 연산으로. 그래서 슈퍼 비전 방법 의 자신을 표현. 그러나 모두가 일어나고 후드 아래에 바로이 주소를 따르고, 지도를 다음과 같이, 당신이 가만히 있으면, 또는 같은 화살표를 다음 우리는 화면에 그려진했다. 확인을 많이 소화. 구문에 대한 어떤 질문, 개념, 포인터의 malloc 등. 네, 여기에 처음. 청중 : 그래서 곳 * t는 보수 ToUpper * (T)를 동일 말한다 활용할 예정이다 모든 문자 또는 그냥 ... 데이비드 J. 마란 : 아, 정말 좋은 질문입니다. 여기이 선에 따라서, 31, 이 투자하는 것입니다 첫 번째 문자 또는 모든 문자. 그럼 가서 대답하자 다시 첫 번째 원칙. 그리고 여기에 첫 번째 원칙은 내 말은 다만 기본 정의로 이동 참여 무슨의. 그래서의 ToUpper 함수이다 그 문자를 대문자로. 그게 다야. * T는 first--로 이동을 의미합니다 T의 주소로 이동합니다. 따라서, 화상에서,이 청크인지 메모리 우리는 malloc에​​ 할당, 이는 T는 *의 T는 여기 뜻이다. 한편, 당신은 통과하고 그 값, 소문자 M 의 ToUpper, 당신은 다시 있어요 자본 M, 어디를 가하고 있습니다? 당신은 같은 위치에 넣어 것입니다. 그리고 이들의 논리에 의해 기본 정의 그것은 단지이다 첫 글자를 대문자로 당신은 내가 나에 반복하지 않는 루프 또는 while 루프를 위해, 그것은 않을거야 당신이 그것을 물어보다 더 아무것도 할 수 있습니다. 좋은 질문. 그래? 청중 : 왜 당신이 사용 했 방법보다는 역 참조 배열? 데이비드 J. 마란 : 아, 좋은 질문입니다. 왜 당신은 역 참조를 사용합니다 대신 배열 방법에있어서? 특별한 이유는 솔직히 없습니다. 그리고, 사실, 이것 예를 들어 어떤 종류의, 오른쪽, 난 그냥 만드는 주장하고있어 더 복잡한 프로그램, 더 눈 위에 유약된다 사람들은 체크 아웃됩니다 이, 슈퍼 비전 보인다 있기 때문에 심지어는 같은 일을하고 비록. 그리고, 솔직히,이가 불필요하게 시각적으로 복잡한 솔루션 문제에 관한 것이다. 그것은 여전히​​ 좋은 디자인이다 다섯 디자인 다섯 중, 이 브래킷 여부 표기법 또는 포인터 표기법. 우리가 얻을 때 특히하지만 ... 이후 과정에서 PSET 5 우리는 그 사전을 구현할 때 나는 times--의 몇 가지를 언급​​했습니다 우리는 실제로 걱정합니다 낮은 수준의 메모리 어드레스 우리가 정말 이해할 수 무슨 일이야. 그러나, 지금,이 밝혀 코드 여기에 대괄호 라인 실제로 존재하지 않습니다. 그들은라고 무엇인가 문법 설탕, 어떤 말의 단지 이상하게 멋진 방법입니다 컴파일러는 대괄호로 변환 그 수식. 그래서 인간의 규칙이다 바로 쓸 수 있어야합니다 이러한 매우 사용하기 쉬운 브래킷. 그러나 컴파일러, 그 소리, 정말 모든 시간을하고있다 당신은 라인으로 강조 무슨 쓰기 24, 후드 아래는 정말 이것으로 변환. 그것은 인간처럼 더 즐거운의 읽고 라인 (24)과 같은 코드를 작성합니다. 하지만 결국 그 훈련 바퀴가 너무 나서야 자신의 편안함 강한 얻을 때. 좋아, 그럼 그 리콜 가장 큰 문제의 종류이었다 우리는 만났다. 그리고이 전체를 촉발 무엇 포인터에 대한 빌어 먹을 대화, 및 주소, 복사 것들. 우리가 걸리지 때문이었다 이 바보, 바보 문제있다 나는 로렌과 logically-- 구현 여기에 데모와 오렌지 주스 최대 milk--에서 완벽하게 알고리즘 올바른 기능 두 개의 변수를 '스와핑 값,하지만 망할 것 영구가, 또는하지 않았다 내 코드에 영구적 인 효과. 그리고 그 이유를했다? 간단히 말해서, 왜이다 스왑의 구현 논리적으로 올바른 있지만, 영향을주지 않습니다 에 전달 된 변수에, 주에 대한 x와 y 같은? 문제의 요점은 무엇입니까? 그래? 청중 : 변수가 만들었 기 때문에 패스 변수의 사본 기능을 통해. 데이비드 J. 마란 : 정확히, 당신은 언제 통과 함수에 변수 또는 인수 함수로, 그들이있어 복사에 의해 전달되는 당신이 찾고 동일한를 얻을 것을 의미 x와 y 모두의 비트 패턴, a와 b 여기라고. 그리고 당신은 무엇이든 할 수 당신은 그 사본을 원하는, 하지만 그들은 더 할거야 호출 기능에 영향을. 그리고, 사실, 우리는 그린 화면, 리콜에 그림 마지막으로, 이에 당신 경우 정말 무슨 생각 경우 hood-- 아래 진행 이 컴퓨터의 메모리입니다 여기에 아래의 체크입니다 메모리는, 메인 사용되고 이의 덩어리입니다 메모리는, 교환을 위해 사용되고 그래서 경우에도 기본은있다 두 변수 x와 y, 스왑은 동일 찾고있을 수 있습니다 도 1 및도 2에있는 둘 값, 하지만 그들은 완전히있어 메모리의 다른 덩어리. 그래서 우리는이에 대한 해결책이 필요합니다. 그리고 솔직히, 지금 우리 것으로 보인다 오른쪽이 문제에 대한 해결책을 갖는다. 우리는 지금 능력이있는 경우 주소로서 물건을 조작 그리고, 일종의 낙하산과 사다리 스타일이 화살표를 따라 그리고 우리가 원하는 어디든 갈 메모리에, 우리는 할 수 없었다 이 문제를 해결 메인에서 전달하는 스왑 하지 값은 우리가 원하는 스왑,하지만 단지 직관적으로 우리는 대신 교환에 전달할 수 있을까? [목소리를 개재] 데이비드 J. 마란 : 왜 우리는하지 않습니다 그것은 바로, 주소 통과? 왜 우리는 스왑을 제공하지 않습니다 보물지도, 만약에 당신, 그에게 리드 실제 값 X와 Y. 하자 스왑, 실제로 변경 그 원래의 비트보다는 다만 비트의 사본을 전달하는. 그리고, 사실, 그건 무슨 가는 해결책이 될 수 있습니다. 이 버전은 여기 분명히 나쁜 결함. 그리고 지금, 첫눈에, 그냥 보이는 같은 우리는 무작위로 별의 무리를 추가 우리의 손가락을 교차 그것은 컴파일 것이다. 하지만, 지금은 컴파일 할 것이다. 그러나 이제 이러한 일들이 무엇을 의미하는지 보자. 의 그리고, 불행하게도, 저자 C는 다른 기호를 선택한 수 이 작은 만들려면 명확하지만, 스타 연산자 다른 의미를가집니다 두 개의 서로 다른 상황. 그리고 우리는 모두 보았다, 하지만의 구별 할 수 있습니다. 거기에 상단에 최대 그래서 나는 A와 B를 변경 한 경우 나쁜에 INT의의를되는 버전 별, a와 b를 int로, 이전에, 정수했다. 지금의 A와 B를 무엇입니까 좋은, 녹색 버전? 그들은 주소입니다. 무엇의 주소가 명확해야 하는가? 정수의 주소. 난 사실 그래서 INT 스타 수단 말 이의 주소입니다 정수, 구체적. 이제 코드의 라인을 예고, 뭔가도 변경되었습니다. TMP 때문에, 동일하게 유지 그냥 임시 정수이다, 거기에는 메모리 마법 없습니다. 그러나 지금은 스타가 필요합니다. 그리고, 사실, 모든 및 (B)의 다른 언급 모든 그건 알 적색에서 녹색으로 변경 내가 접두사있어 것입니다 별이 변수. 나는 A와 B를 복사하지 않기 때문에. 때문에 난 그냥 A와 B와 스왑을 복사 할 경우 A와 B, 사실은 무엇을 교환입니까? 그냥 주소, 나는 교환 할 무슨 일이 그 주소에 있습니다. 나는 거기에 가고 싶어. 그래서 별 연산자 내 함수의 내부, 하지 매개 변수 목록의 내부, 당신은 그 주소로 이동을 의미 실제로 그 값을 변경합니다. 그래서 사진을한다 지금 대신처럼 보인다. 음, 대신 나도 전달 해요 용의가 아닌 1, ㄴ 2-- 실제로 추가 할 필요가 여기에 다른 정의. 그래서이 덩어리한다고 가정 메모리의 위치 (10)이다. 이 위치 (11)에서하지만,이 단순화의 비트이며, 지금은 X 두 가지 선택이 내가 통과 할 수있다 와 y 또는 나는 그들의 주소를 전달합니까? 나는 그들의 주소를 전달하는 경우 이런, 내가 단지 지금 구현해야 녹색 코드 당 스왑 즉,이 볼 때, 그래서 때를 B, 그냥 A와 B를 복사하지 않습니다 본다 그리고 우유와 오렌지 주스를 이동합니다. 우유, 오렌지 주스 은유는 지금, 고장 그 때문에 컵은 액체가 아닌지도. 우리는 대신에 갈 필요 (10)을 해결하기 위해 우리 (11)을 해결하기 위해 이동해야하고, 그 교환 로직을 수행합니다. 따라서 논리는 동일하지만 우리는 약간 다른 방법이 필요합니다 의 그 변수에 접근. 그래서 결국, 무​​엇을 프로그램은이처럼보고있다. swap.c에서 그대로 복사 및 녹색 버전을 붙여. 하지만 하나의 변화를 확인해야합니다. 그냥 스왑을 변경하기에 충분하지 않습니다. 어떤 코드의 다른 라인 내가 변경해야합니까? 그래? 청중 :이 인수를 사용합니다. 데이비드 J. 마란 : 그것의 인수를 사용합니다. 그래서 주까지 이동하면, 내가 단지 x와 y에 전달할 수 없습니다, 그리고, 나는, 마지막 약속 새 구문의 조각 오늘. 내가하지 X에 전달해야하고 Y하지만, x와 y의 주소. 그리고, 기호를 밝혀 C의 저자가 선택한 그 여기에 앰퍼샌드를 사용하는 경우하지에있다 비트 앰퍼샌드와 혼동, 당신은 앰퍼샌드를 사용하는 경우 여기와 여기에 앰퍼샌드, 이 당신을 위해 파악한다 x의 주소가 무엇을, 아마 10이야, 무슨 일이야 Y의 주소는, 어쩌면이다 11, 대신 사람들을 전달합니다. 그래서 많은 한 번에 모두를 흡수한다. 그러나 이제 빨리 지금 보자 우리의 나머지 사분 여기서 일이 틀려서 갈 수 있습니다. 그리고 옆으로, 실제로으로 나는이 그림을 가져 갔다, TF는 년이 전에이 사진을했다. 그래서이 뒤쪽 모서리입니다 엘리엇 식당 홀. 포인터는 아마도 가장 어려운 있습니다 우리가 CS50에 포함 항목을 참조하십시오. 당신이 종류의 걱정한다면 어쩌면처럼 경사입니다 하키 스틱의 더 이 같은 인식 우리는 종류의 피크에 근접하고 개념적 복잡성 측면. 그리고 나는까지이 가져 사진, 내가 맹세 때문에 가을 1996 년 신에, 때 내가했다 나의 가르침 동료와 CS50, Nishat 메타, 그는 나를 앉았다 점심 식사 엘리엇 D. 홀 코너, 또는 저녁 식사, 또는 뭔가하는 시도 나를 포인터를 이해하는 데 도움이됩니다. 내가 주 후에 어디에 그리고 이것은이다 그것은 강의시에 도입 된 나는 마지막으로 포인터를 이해했다. 그리고 나는이 희망 해요 훨씬 빨리 당신을 위해 클릭합니다. 그러나 절대적으로 중이 실현 보다 정교한 주제 우리가 살펴 보았다. 그러나 가장 강력한 중입니다. 당신이 그것을 얻을 때, 정말 전부 다만 마지막으로 함께 올 것. 그래서 나머지는 그렇지 않은 안심 오늘의 모든 싱크 할 필요가있다. 그래서 여기에 마지막 프로그램이 있습니다 우리가 보는 것입니다. 그리고 우리는로 끝나는거야 클레이 메이션의 빠른 삼분 우리의 친구, 닉 Parlante에 의해 만들어진. 여기에 프로그램은 상위 두에 즉,이다 선은 변수 x와 y를 선언한다. 둘 주소는 정수, 일명 포인터. 우리는 충분히 할당 메모리는 int를 저장하기 및 주소를 저장 X에서 해당 메모리. 그래서, 심지어는 간단합니다 이전 예보다. 나에게 4 바이트의 메모리를 줘 그 INT의 크기이다, 와 X에 해당 주소를 넣어. 이 줄은 여기에 의미 X에있는 주소로 이동 그리고 의미를 넣어 생활,이 수 (42). 하지만이 라인은 저를 걱정. Y는 Y에있는 주소로 이동을 의미 스타, 거기 불운 한 숫자 13을 넣어. 왜이 시점에서, 그것은 위험하다 story--에 불구하고 빠르게 말했다 우리 잃고 분 here-- 왜 나쁜 내 말을 들어, Y의 주소로 이동? 청중 : 당신은 필요가 없습니다 [들림]. 데이비드 J. 마란 : 내가하지 않은 Y에 아무것도 넣어. 그래서 Y의 값이 무엇인가, 이야기를이 시점에서? 우리는 아무 생각이 없습니다. 그것은 어떤 쓰레기 값이다 및도 빙키 알고 않습니다. 우리는이 주에 끝낼 수 있다면. [비디오 재생] 이봐, 빙키는, 일어나. 그것은 포인터 재미를위한 시간이다. 그게 무슨입니까? 포인터에 대해 알아? 아, 케이크. - 그럼, 시작하는, 우리가 추측 몇 포인터 필요할 것. -그래. 이 코드는 두 개의 포인터를 할당 어떤 정수를 가리킬 수 있습니다. -OK, 잘 내가 볼 두 개의 포인터 있지만 무엇을 가리키는 것으로 보이지 않는다. - 그건 맞아. 처음에 대한 포인터 아무것도 가리 키지 않습니다. 그들이 가리키는 것입니다 pointees에게 전화를 설정 별도의 단계입니다. 오른쪽, 오른쪽, 오. 나는 그것을 알고 있었다. pointees는 별도입니다. 그렇다면 당신은 pointee를 할당합니까? -OK, 잘 코드 할당 새로운 정수 pointee, 이 부분 집합의 X는 그것을 가리 키도록. 이봐, 그건 더 나은 보인다. 그래서 뭔가를 할 수 있도록. -OK, 나는거야 포인터의 X 역 참조 그 pointee에 번호 (42)를 저장합니다. 이 트릭은, 내가해야 내 역 참조의 마법의 지팡이. 역 참조 - 당신의 마법의 지팡이? 어, 그, 그건 좋아요. -이 코드의 모습입니다. 난 그냥 수를 설정합니다 그리고 - [POP 사운드] 이봐,이 간다가 보인다. 그래서, X에 역​​ 참조를하는 것은 다음과 화살표는 pointee에 액세스 할 수 있습니다. 이 경우,도 42을 저장한다. 봐, 번호를 저장하는 데 사용하려고 다른 포인터를 통해 13, Y. -그래. 난 그냥 y로 여기에 갈거야, 과 수 (13) 셋업을 얻을. 그리고 다음의 지팡이를 가지고 역 참조와 그냥 ... [부저음] 오, 헤이 그 작동하지 않았다. , 빙키 어, 그렇게하지, 말 역 참조 생각 설정 때문에 Y는 좋은 생각이다 pointee까지 별도의 단계입니다. 그리고 나는 우리가 이제까지 그것을했다고 생각하지 않습니다. -Hmm, 좋은 점. - 그래, 우리는 포인터 y를 할당하지만, 우리는 pointee를 가리 키도록 설정하지 마십시오. -Hmm 매우 관찰력. 이봐, 당신은이 빙키 좋은 찾고 있습니다. 당신은 그래서 그것을 고칠 수 Y 점 X와 같은 pointee에. - 물론, 내 마법의 지팡이를 사용 포인터 할당. 될 예정 것을 -is 문제 이전에 같은? 아니,이 pointees을 만지지 않습니다. 그것은 단지 하나의 포인터를 변경 같은 누군지 모르겠지만를 가리 키도록 [터지는 소리] 다른 --as. -오 알 겠어. X와 같은 곳으로 지금은 Y 점. 그래서, 지금 y는 고정되어 기다립니다. 그것은 pointee있다. 그래서 당신의 지팡이를 시도 할 수 있습니다 13 이상을 보내 다시 역 참조. - 오, 좋아, 여기에 표시됩니다. 이봐, 그 봐. 이제 Y에 작품을 역 참조. 그리고 포인터를 공유하고 있기 때문에 하나 pointee 것을, 그들은 둘 다 13을 참조하십시오. - 네, 공유, 어, 뭐든간에. 그래서 우리는 지금 장소를 전환하는거야? 오, 우리는 시간이 없어 보인다. -But-- 세 포인터 규칙 기억 - 그냥. 번호 1, 기본 구조 당신이 포인터를 가지고있다, 그것은 pointee에 점 이상. 그러나 포인터 pointee 별도입니다. 공통 에러 포인터를 설정하는 것입니다 하지만 그것을 pointee를 제공​​하는 것을 잊지합니다. 수 2, 포인터 역 참조 포인터에서 시작 이상 그 화살표를 따라 그 pointee에 액세스 할 수 있습니다. 우리 모두가 알다시피, 이것은 단지이 경우 작동 종류의 돌아 오기 pointee이며, 숫자 1을 지배합니다. 번호 3, 포인터 할당 한 포인터를 취 과를 가리 키도록 변경 다른 포인터와 같은 pointee. 할당 후 그래서, 두 개의 포인터 같은 pointee을 가리 킵니다, 때로는 그 공유라고. 그리고 정말, 모든 작업이 완료. 안녕 지금. [END 재생] 데이비드 J. 마란 : 그 CS50을 위해 그것을이다. 교수 닉 Parlante 감사합니다. 우리는 다음 주에 볼 수 있습니다. [전자 음악 연주]