DAVID 마란 : 안녕하세요, 및 CS50에 다시 오신 것을 환영합니다. 그래서이 주에서 4의 끝입니다. 먼저 한 발표. 는 소위 다섯 번째 월요일 이렇게 이 오는 월요일오고. 이에서 변경할 수있는 기회입니다 편지 학년 / UNSAT 토, 또는에서 문자 등급 / UNSAT을 앉아 있었다. 귀찮게, 그 프로세스를 필요로한다 당신이 작성해야 서명이 있기 때문에 그 분홍색 추가 / 드롭 형태의 하나 중. 때문에 기술적으로, SAT / UNSAT 버전 및 문자 등급 버전 별개의 제품 번호가있다. 하지만 큰 문제. 그냥 나에게 와서 나 강도 짓 또는 어느 시점에서 로렌. 당신은 종류가없는 경우 나 이메일을 보내 서류의 당신이 오늘 필요가 있고, 우리 당신이 취할 수 있도록해야합니다 월요일 그 전에 처리. 좋아, 그래서 오늘 - 실제로, 에코의 비트가있다. 우리는 음색 저를 조금 할 수 있습니까? 확인을 클릭합니다. 그래서 오늘, 우리는 주제를 소개합니다 포인터로 알려져 있습니다. 그리고이 중 하나입니다 인정합니다 우리가 경향이 더 복잡한 주제 이 클래스에 포함, 또는 실제로 어떤 C.를 사용하는 입문 과정 그러나 특히, 그것은 내 말을 당신의 마음은 조금 더 구부러진 느낌이 든다면 오늘 주에 와서. 그것은 당신이 점점 대표 아니다 이 전혀 나쁜 그것은 단지 그 의미 그것은 특히 복잡한 항목의 내가 약속하는, 몇 주 따라서, 모든 게 너무 눈에 띄게 보일 것입니다 생각해 보면 간단합니다. 나는 아직도이 날을 기억한다. 나는 엘리엇 식당 홀에 앉아 있었다 내 TF Nishat 메타 옆에 앉아, 엘리엇 집의 거주자는 사람이었다. 그리고 어떤 이유로,이 주제는 단지 클릭합니다. 이는 너무 고생하는 말을하는 것입니다 시간의 일부 금액에 대한 그것은,하지만 함께 그러한을 피할 수 있도록 최선을 다할 것입니다 주제와 궁극적으로 투쟁 매우 강력합니다. 사실, 주제 중 하나는 우리가 논의 할 것이다 올 주에있는은 의 안전, 그리고 어떻게 당신이 실제로 수 방법으로 컴퓨터를 이용 그 의도되지 않았습니다. 그리고 그 착취는 전형적으로 버그, 실수의 결과가 우리 사람들은 몇 가지를 이해하지 의하여 만든다 기본 구현 그 세부 사항을 통해 프로그램이 만들어집니다. 지금이 있도록하면 모든 사용자에게보다 것 친절한, 나는 10 플레이 줄 알았는데 작은 클레이 메이션의 두 번째 미리보기 주어졌다 비키라는 그림 스탠포드에서 우리의 친구에 의해 삶, 교수 닉 Parlante. 그래서 내가 당신에게 이것을 줄 수 여기 빙키의 맛보기. [동영상 재생] - 안녕, 빙키. 일어나. 그것은 포인터 재미를위한 시간이다. - 뭐라 구요? 포인터에 대해 알아? 아, 좋아요 ~. [END 동영상 재생] DAVID 마란 : 스탠포드입니다 컴퓨터 과학. 그래서 더 그에 와서. [박수] DAVID 마란 : 죄송합니다, 닉. 그래서 우리가 종료 된 마지막 시간을 기억 이 정말 흥분 클리프 행어 그것에 의하여이 기능을 그냥 작동하지 않았다. 적어도 직관적으로, 그것은 느낌 그것은 작동해야처럼. 단순히 값을 교환 두 정수의. 하지만 기억이 우리를 인쇄 할 때 주, 하나의 원래 값 둘째, 그들은 여전히​​ 하나 있었고, 두 가지가 아닌 두 가지 하나. 그래서 나는 실제로 전환 할 이상 장비에. 나는의 골격 코드의 비트를 썼습니다 내가 주장하는 곳, 여기에 진행하는 X 1이되고, Y는 2가됩니다. 그런 다음 자신의 두 출력 인쇄 F와 값. 그때 나는 여기까지 주장하는 우리는 그들을 교환하는 것입니다. 나는 우리에게 여기 빈 자리를 떠났다 잠시 오늘에 입력합니다. 그럼, 주장거야 그 두 변수가 교환되었다. 그럼 인쇄 할거야 다시 밖으로. 그리고 바라건대, 나는 2 일을 볼 수 있습니다. 2, 1. 초 간단 그건 지금의 목표. 그래서 우리는 스와핑에 대해 어떻게 가야합니까 두 변수? 여기 제안 잘 경우 이들 컵 컴퓨터 메모리를 나타낼 수 있습니다. 이것은이, 몇 물린입니다 또 다른 몇 바이트이다. 우리는 자원 봉사자과 최대에 올 수 있었다 익숙한 경우에, 저희에게 몇 가지 음료를 혼합? 올라 와요. 당신의 이름은 무엇입니까? JESS : 제스. DAVID 마란 : 제스? 최대에 제스되어 있습니다. 당신이 괜찮다면, 우리는 넣어 가지고 당신에 구글은 유리 그래서 우리는 할 수 있습니다 이 불멸. OK, 유리. 동영상을 기록합니다. 그리고 OK, 우리는에 딱 여기 제스로 이동합니다. 좋아. 만나서 반가워요. 그래서 내가 좋아하는 것 당신은 무엇을 여기에서 - 아주 빨리, 당신은 수 있다면 - 다만 저희에게 오렌지의 절반 유리를 쏟아 주스와 우유의 절반 유리 효율적으로 숫자 1을 나타내는 다른 컵에 한 컵과 2인치 이 좋은 영상이 될 것입니다. JESS : 죄송합니다. DAVID 마란 : 아니, 아니. 괜찮아요. 좋은. 좋아, 그래서 우리는 4 바이트가 오렌지 주스의 가치가있다. 우리는 그것을 값을 1이라고합니다. 지금은 우유의 가치가 다른 4 바이트. 이 두 가치를 호출합니다. 각각 x와 y 그래서. 좋아, 이제 손으로 작업하는 경우 - 모두의 앞에 당신을 위해, 제스, 귀하의 급우 - x와 같은 Y의 값을 교환하는 것입니다 우리의 오렌지 주스를 원하는 다른 컵이 컵에 우유 방법 당신 수도 - 당신은 실제로하기 전에 그것은 -이 일을 대한 갈? OK, 의사 결정을 현명. 그래서 당신은 좀 더 많은 메모리를 필요로합니다. 그러니 임시 할당하자 컵, 만약에 당신이. 이제 x와 y를 교환 진행합니다. 우수. 그래서 아주 잘 했어. 너무 많은 제스 감사합니다. 여기 있어요. 작은 기념품. 좋아, 그럼 분명히 매우 간단한 아이디어. 우리가 조금 필요 완전히 직관적 인 더 많은 저장 공간 -이 양식, 컵 - 우리가 실제로 원하는 경우 이 두 변수를 교환합니다. 그럼 정확히 그렇게 할 수 있습니다. 여기까지 난 난 주장 곳 사이 일부 교환 일을 할 것, 나는거야 가서 온도를 선언합니다. 그리고 X, 말에이 동일하게 설정됩니다. 그때의 값을 변경하는거야 다만 제스 같은 x는 공급했다 우유와 오렌지 주스 Y와 같아야합니다. 그리고 같 y를 변경하는거야 지금 우리는 것 아니합니다 때문에 X, 원에 갇혀 아니라 임시 직원. 어디에서 일시적으로 I - 나 어디 제스 일시적으로 오렌지 주스를 넣어 그렇게 손상시키는 전 우유와 컵. 그럼 내가 지금 가서이 문제를 확인 할 수 있습니다. 그것은 noswap.c라고. 그리고 지금 내가 어떤 스왑을 실행할 수 있습니다. 내가 확장하면 참으로 나는, 참조 창 조금 그 x는 1, Y는 2입니다. 그리고 x는 2, Y는 1입니다. 그러나 월요일에 우리가 일을했던 기억 조금 다르게 약자 I 대신 도우미 함수를 구현 만약에 당신이 그 사실은 무효이다. 나는 그것을 교체했다. 나는 그것을 두 개의 매개 변수를주고, 내가 전화 그들과 나는 그들이 나했다. 솔직히, 나는 그들을 x와 y 호출 할 수 있습니다. 중지 아무것도 없다 그 일을에서 나를. 그러나 나는 그 다음의 주장 약간의 모호한. 때문에 월요일 리콜이 우리 이러한 매개 변수가 있다고 주장 값의 복사본이 전달 당신과 그래서 그냥 놨어요 마음은, 제가 생각하기에, 당신이 사용하는 경우 동일한 변수. 그래서 내가 대신 그들에게 전화 할게 와 B 단지 명확성을 위해. 그러나 우리는 그들 대부분 호출 할 수 있습니다 우리가 원하는 건. 그리고 복사 및 붙여 넣기거야 거기에서 효과적으로 코드 여기에 아래로. 난 그냥 작동하는지보고 있기 때문이다. 그래서 꽤 좋은 모양이다. 그리고, 내 X 내 X을 바꿀거야 에, B와 b에 내 Y에 나의 y를 입력합니다. 그래서 다른 말로하면, 똑같은 논리. 제스가했던 똑같은. 그리고 I가해야 할 한 가지 여기에 물론, 지금이 호출됩니다 함수 또는이 함수를 호출합니다. 그래서 두 가지로이 함수를 호출합니다 입력, x와 y 및 명중 저장합니다. 좋아, 그래서 근본적으로 같은 것. 사실, 아마도 프로그램을 만들었습니다 불필요하게 복잡한 그냥 복용 함수를 작성 코드의 약 6 선 반면 I 이전에 구현 한 이 3 막합니다. 그럼 내가 지금 가서 리메이크하자 이, 아니 스왑을하지 않습니다. 좋아, 여기 망쳐. 이 오류가해야 할 수도 있고 그 귀하의 점점 흔히 볼 프로그램은 더 복잡. 그러나 쉽게 수정이있다. 나를 여기까지 뒤로 스크롤 할 수 있습니다. 그리고 내가보고 첫 번째 오류는 무엇입니까? 암시 적 선언. 그것은 일반적으로 무엇을 나타 냅니까? 아, 프로토 타입을 잊어 버렸습니다. 나는 컴파일러를 가르치는 잊었 스왑 존재하는 것입니다 비록 그 처음에 존재하지 않습니다 프로그램의. 그래서 난 그냥, 무효, 스왑을 말할거야 INT, INT B, 세미콜론. 그래서 그것을 구현할 않을거야. 하지만 지금 무슨 일이 여기까지의 일치합니다. 통보, 세미콜론의 부재 여기, 이는 필요하지 않은 경우 구현. 그래서 나는이 리메이크하게, 아니 스왑을하지 않습니다. 더 나은 모양입니다. 아니 스왑을 실행합니다. 그리고 젠장. 우리는 월요일에 있었던 곳에 지금 우리는 돌아 간다 어디에 것은 교환하지 않았다. 그리고 직관적 인 설명은 무엇입니까 왜이는 경우가? 그래? 학생 : [들림]. DAVID 마란 : 그렇습니다. 그래서 a와 b는 x와 y의 복사본입니다. 그리고 사실, 언제든지 당신이 있었어요 지금까지 그 함수를 호출 정수와 같은 변수를 전달 - 스왑 여기에서 기대되는 것처럼 - 너희들은 사본을 전달하고 있습니다. 그것은 조금 걸립니다 의미 이제 시간의, 분할 초, 하나의 비트를 복사하는 컴퓨터 다른 사람의 비트로 변수입니다. 그러나 이러한 큰 문제가 아니다. 그러나 그럼에도 불구하고 사본입니다. 그리고 지금, 스왑의 맥락에서, 나는 성공적으로 사실입니다 A와 B를 변경. 사실, 빠른 작업을 수행하자 정신을 확인합니다. 인쇄 F는 I, 새로운 라인 %입니다. 과에하자 연결합니다. 지금 B와 같은 일을하자. 그리고 여기에 같은 일을하자. 그리고 지금, 저 그 같은 행을 복사하자 다시 함수의 하단에 재미있는 내 세 줄 이후의 실행 및 수도 또 다시 A와 B를 인쇄 할 수 있습니다. 의이 만들 그래서 지금하자, 아니 스왑을하지 않습니다. 나 터미널 창을 만들어 보자 비트 키, 우리가 볼 수 있도록 한 번에 그것의 더. 그리고 어떤 스왑을 실행합니다. x는 1, Y는 2입니다. 는 1, B는 2입니다. 그리고,은 2, B는 1입니다. 그래서 그냥 제스처럼 작동합니다 여기에 내부 스왑했다. 물론, 그것은 아무 효과가 없어요 메인에있는 변수에 대한. 그래서 우리는 트릭을보고 그것에 우리 바로이 문제를 해결할 수 있을까? 당신은이 범위에 직면 할 때 문제, 당신은 수 그냥 펀트와 X을 와 y 어떤 대신에 변수? 당신은 그들이 지구 만들 수 있습니다. 파일의 맨 위에 넣어 우리는 심지어 15의 게임에서 그랬던 것처럼. 우리는 전역 변수를 사용합니다. 하지만 게임 (15)의 맥락에서, 그것은 세계를 가지고 합리적인 , 보드를 나타내는 변수 A 때문에 15.c의 전체가 전부입니다 그 게임을 구현하는 방법에 대한. 즉의 파일이 할 것들이 존재. 그러나 여기이 경우, 난 함수 스왑을 호출. 나는 두 변수를 교환하고 싶습니다. 그리고 그냥 별거 느낌을 시작합니다 만약 우리의 모든 솔루션 우리가 범위로​​ 실행 문제 문제는 글로벌하게됩니다. 매우 빠르게 우리의 프로그램이기 때문에 아주 엉망이 될 것. 그리고 우리는 매우 드물게 않았다 15.c.의 결과로 거기 밖으로하지만 변 모두 더 나은 방법입니다. 내가 실제로 돌아가서를 삭제할 수 그냥이 코드를 단순화하기 위해, F의를 인쇄 할 수 있습니다. 그리고 내가 제안하자 그 이것은 참 나쁘다. 하지만 대신에 약간의 별표에 추가하는 경우 별, 나는이 대신 설정할 수 있습니다 의 하나로 기능 실제로 조작. 그래서 내가 다시 가서 말을 인정하자 별표는 항상 어렵습니다 그래서 나는 별을 말할 수 있습니다. 난 그냥 하나를 자백합니다. 좋아. 그리고 지금, 내가가는 오전 대신 할 수 있습니까? 모든 그래서 일단, 내가 지정하는거야 대신에 int를 전달 스왑 기능은, 내가 대신 해요 INT 별 말을가는. 지금, 별은 무엇을 나타 냅니까? 이것은 포인터의 개념이다 빙키, 클레이 메이션 캐릭터였다 전 순간을 참조. 우리는 INT 스타의 의미를 말할 그렇다면 이 지금은 될 수 없습니다 것을 그 값에 의해 전달. 그것은 안으로 복사 할 수 없을거야 오히려의 주소는 안으로 전달 될 예정 그래서 컴퓨터의 내부 기억 그렇지 않으면, 메모리의 전체 무리입니다 RAM으로 알려져 있습니다. 그리고 RAM은 단지입니다 바이트의 전체 무리. Mac 또는 PC가있다 그렇다면 이기가바이트, 당신은 2가 메모리 억 바이트입니다. 지금은 그냥 가정하자 바로 해당 상황이 좋은 질서 유지, 우리 주소를 할당 - 수 - 컴퓨터에있는 RAM의 모든 바이트. 그 2의 첫 번째 바이트 억 숫자 0으로됩니다. 다음 중 하나가 바이트의 번호를 하나의 번호입니다 최대 두, 모든 방법, 점 점 약 20 억에 점. 그래서 당신이 바이트 수는 있습니다 컴퓨터의 메모리. 그래서이 있다고 가정하자 무엇을 우리는 주소를 의미합니다. 그래서 무슨 INT 스타를 볼 때 지금 스왑에 전달 될 의 주소를 입력합니다. 하지의 가치, 그러나 어떤은 우편 주소는 말하자면입니다 - RAM에서의 위치. 와 마찬가지로 B에 대한, 내가 갈거야 같은 말을합니다. 중간, 스타, 나. 옆 기술적 스타 다른 위치에 갈 수있다. 그러나 우리는되고 별 표준화 것이다 데이터 형식 바로 옆에. 따라서 서명은 이제 의미 스왑, 나 줄 INT의 주소 및 전화 그 주소를. 나에게 또 다른 주소를 제공 Int와 그 주소 b를 호출합니다. 하지만 지금 여기 내 코드를 변경할 수있다. 때문에 INT 온도를 선언하면 - 이는 int 형의 여전히 - 하지만, 그것은에 저장 가치의 어떤 종류의? 명확하게하기 위해, 나는에 넣은 채로 지금 서면으로 코드? 내가있는 위치를 가하고 있어요. 하지만 난 걱정하지 않는다 위치 이제, 오른쪽? 온도는 단지 제스 '제 컵이 존재 존재, 어떤 목적을 위해? 값을 저장합니다. 우유 또는 오렌지 주스. 실제의 주소를 저장할 수 없습니다 그런 것들 중 하나는, 어느 느낀다 이 실시간으로 거의 무의미 어쨌든 세계 상황. 그래서 정말 내가이 온도에 넣을 의 주소 만이 아닙니다 의 내용을 표시합니다. 123 같은 숫자 인 경우 그래서,이는 해당 메모리의 123 번째 바이트 단지 , 점유로 발생하는 값 에가 점유 할 수 발생합니다. 나는 그 주소로 이동하려는 경우 나는 별 말을해야합니다. 마찬가지로, 만약 내가 무엇을 변경했다 주소, I 변경 이를 시작합니다. 나는에서 무엇에 저장할 경우, 위치에 무엇에 위치 B의, 스타 B 호텔. 이 확실히 그래서 짧은 경우에도 아직 침몰 - 그리고 난 기대하지 않을 것이다 너무 빠른 것 - 내가하는 모든 접두어 것을 깨닫게 이러한 제 변수 별, 말 값을 잡아하지 않습니다. 값을 변경하지 마십시오. 오히려, 해당 주소로 이동 그리고 값을 가져옵니다. 그 주소 변화로 이동 이 값을 변경합니다. 그래서 지금, 내가 정상까지 다시 이동하자 방금 여기에 다음 행을 해결하기 위해 일치하는 프로토 타입을 변경할 수 있습니다. 하지만 지금 한 가지를 수행해야합니다. 직관적으로, 그 유형을 변경 한 경우 인수의 스왑 기대하고있다, 나는 다른 무엇을해야합니까? 내 코드에서 변경? 내가 스왑을 호출 할 때. 지금 무엇을하고 있으므로 나는 아직도 교환 할 통과? 값 x와 y의 값 또는 우유와 오렌지 주스. 하지만 난 그렇게하고 싶지 않아. 내가 대신 무엇을 전달하고 싶어? X의 위치와 Y의 위치. 그들의 우편 주소는 무엇입니까 말하자면. 그래서 그렇게, 앰퍼샌드가있다. 주소와 같은 소리의 앰퍼샌드 종류. 그래서 N, 앰퍼샌드, 주소 의 X 및 Y의 주소. 그래서 우리가 사용하는 의도적이다 앰퍼샌드 함수를 호출 별 선언하고 때 기능을 구현. 로 그냥 앰퍼샌드 생각 연산자의 주소와 같은 스타 운영자가 간다 - 또는 더 적절하게, 역 참조 연산자를 사용합니다. 그래서 단지에 단어의 전체 많아요 지금, 희망, 스왑가는 것을 말한다 정확해야합니다. 내가 가서 확인하자 - 않도록,의 실제로 파일의 이름을 변경하자 이 프로그램은 여전히​​ 스왑 호출되지. 나는 우리가 지금은 swap.c 전화 할게 주장한다. 그래서 스왑합니다. 점, 슬래시, 교환. 그리고 지금 실제로, x는 1, Y는 2입니다. 그리고, x는 2, y를 하나입니다. 그럼 우리는이 작업을 수행 할 수없는 경우 보자 무엇에 관해서는 다르게 조금 여기에 우리가 간다. 먼저, 우리를 확대하자 여기에 화면을 그리기. 나이 순간을 위해 제안하자 - 그리고 여기 그릴 때마다 미러링됩니다 거기에 지금은 - 내가 제안하자 그 여기에 메모리의 전체 무리, 또는 RAM, 내 컴퓨터의 내부입니다. 그리고는, 바이트 수있을 것입니다 ,의 말 1 봅시다. 이 바이트 숫자 2가됩니다. 그리고 더 왕창 수행하고 있습니다 다음에 점 점 점의 무리 20 억이 거기에 있음을 나타냅니다 이러한 것들. 4, 5, 등등. 그래서 처음 다섯 바이트가있다 내 컴퓨터의 메모리가 부족합니다. 모든 권리? 20 억 중 거의. 하지만 지금은 제안거야 다음. 나는 X가 될 것을 제안하는거야 숫자 1을 저장하고, Y는 것입니다 숫자 2를 저장합니다. 나 지금 가서 나타냅니다하자 이 값은 다음과 같습니다. 다음과 같이이 작업을 수행하자. 저에게 잠시만를 제공합니다. 잠깐만. 확인을 클릭합니다. 나는이 좀 만들고 싶어 - 다시이 작업을 수행하자. 그렇지 않으면 나는에 가서 사용하고 같은 숫자, 실수, 여러 번. 그래서 그냥 우리는 다른 번호가 에 대해 이야기 해 보겠습니다이 바이트를 호출 번호 123, 124, 125, 126, 그리고 점 점 점. 나를 내가 갈거야 이제는 주장하자 여기에 값 1, 값 2를 넣어 여기에, 그렇지 않으면 x와 y로 알려져 있습니다. 그래서 그냥 그렇게 일어난다 이 X, 이것은 Y입니다. 그리고 그냥 우연에 의해, 컴퓨터, 운영 체제, 위치에 X를 넣어 발생 번호 123. 와 y 위치 124에서 끝났다 - 젠장. 나는이 해결해야합니다. 오 이런, 난 정말 이렇게 할 수 있습니까? 예,이과를 해결하려면 오늘이에 대한 적절한 나. 죄송합니다, 현재에 새로운. 127, 131, 그리고이되고 싶지 않았다 복잡하지만 왜 변경 않았다 이 숫자? 나는 정수가 원하기 때문에 실제로 4 바이트 수. 그럼 이것에 대해 최고 항문 될 수 있습니다. 경우 1 해결 될 일이 있도록 123 2 주소 될 것입니다 그냥 4 부전승 거리의 127 때문이다. 그게 다야. 그리고 우리는 모두 잊어 것이다 세계에서 다른 주소. 그래서 X는 위치 123입니다 Y 위치 127입니다. 그리고 지금, 나는 실제로 무엇을 할 수행 할? 지금 스왑을 호출 할 때, 무엇을의 실제로 무슨 일? 글쎄, 난 스왑을 호출 할 때, 내가 전달 해요 X의 주소와 y의 주소를 입력합니다. 그래서 예를 들어,이 두 가지 종이 지금 두 대표 인수 a와 b 스왑, 내가 뭘 오전 이들의 첫 번째에 쓰는 것 나는로 참조 호출 할거야 무엇입니까? 정확히 123. 그래서 내가 주장이있다. 이 매개 변수입니다. 거기에서 x의 주소를 가하고 있어요. 그게 뭐야? 그게 뭐야? 아니, 아니. 즉 OK입니다. 여전히 좋은, 여전히 좋아요. 그래서이 있습니다. 지금 용지의 두 번째 조각에, 이 B가 될 것입니다, 나는 뭐야 에 작성 될 것 이 종이? 127. 그래서 이후에 변경된 유일한 이 이야기의 우리의 이전 주어는있다 오히려 1 문자보다 2, 난 123에서 127로 전달하는 것. 그리고 지금이 안에 넣을거야 이 상자의 모든 권리? 그래서 검은 색 상자가 나타 스왑 기능. 한편,의 지금 누군가가 보자 스왑 기능을 구현합니다. 여기까지 누군가가 것 자원 봉사 하시겠습니까? 올라 와요. 당신의 이름은 무엇입니까? 찰리. 좋아, 찰리. 올라 와요. 그래서 찰리는 연극을하려고하는데 우리 블랙 박스의 역할. 나는 당신이 싶은 무엇 찰리, 지금과 같은 방식으로 스왑을 구현합니다 즉,이 두 주소를 부여, 당신은 실제로 가고 있었다 값을 변경합니다. 그리고 귀에 속삭이는 것 여기에 TV를 실행하는 방법에 대해 설명합니다. 그래서 가서, 당신은 블랙 박스입니다. 거기에 도달합니다. 당신은 어떤 값에 대한 참조와 볼거리 당신이 나에 대해 어떤 값을 볼 수 있습니까? 찰리 : 123이며, B는 127입니다. DAVID 마란 : OK, 정확히. 잠시 거기에 지금은 일시 정지. 당신이 지금 할 수있는 일은 우선 코드에 따라 - 어떤 지금 화면에 끌어거야 - 조금을 할당하는 것입니다 메모리 비트 온도를했다. 그래서 앞서 갈 건데 당신이 메모리를 제공합니다. 그래서이 세 번째 변수가 될 것입니다 당신은에 액세스 할 수 있는지 당신은 임시했다. 그리고 당신은 무엇을 쓸거야 용지의 임시 조각에? 찰리 : 포인터, 오른쪽? DAVID 마란 : OK, 잘하지 포인터를 반드시. 그래서했습니다하는 코드의 라인 오른쪽에 강조, 거기부터 시작하자. 그것은 스타 말합니다. 그래서 현재 저장되어 번호 123. 그냥 직관적으로 무엇을 스타 123하셨습니까? 그러나 구체적으로,이 경우 123, 별은 무엇을 의미? 의 값입니다. 이상 부담이갑니다. 그래서에서를 잡고, 내가 그를 제안하자 당신의 손이 가서 치료하는 것처럼 그것은지도입니다. 그리고 컴퓨터에 자신을 걸어 메모리, 무엇인가 우리를 찾을 위치 123. 정확히. 그래서 우리는 위치에 123을 참조하십시오 뭐, 분명히? OK, 이제 당신은 어떤 값을 수 있습니다 온도에 넣어가는거야? 정확히. 그래서 가서 그렇게. 와 조각에 숫자 1을 기록 현재 온도라는 제목의 논문. 이제 다음 단계가 당신은 구현하는거야 어떻게 될 것입니다. 음,의 오른쪽에 코드의 다음 줄 스타 B입니다. B의 과정은 주소를 저장합니다. 즉, 127를 해결합니다. 스타 B 자연스럽게 말하기 무슨 뜻 이죠? 해당 위치로 이동합니다. 그래서 가서 무엇이 우리를 찾을 위치 127. 확인을 클릭합니다. 물론, 위치, 127, 여전히 값이 2입니다. 그래서 당신은에서 지금 매장가는거야 의 위치에서 무엇입니까? 그래서 별 의미가있는 위치로 이동합니다. 위치는 무엇인가? 정확히. 그래서 지금, 당신은 변경하려는 경우 해당 위치에서 무엇을 - 내가 가서 실행하겠습니다 지우개가 여기에 있습니다. 이제 브러쉬에 다시 넣습니다. 어떤 숫자는 쓸거야 이제 빈 상자에? 정확히. 그래서이 코드 라인은 명확하게 -하자 나 찰리가 무슨 짓 일시 중지 여기에서 지적 그가 그냥 이루어집니다 것은 위치 123 그 상자에 쓰기 B에서 이전에 있던 값. 그래서 우리는 지금 실제로 구현 한 코드의 두 번째 줄. 지금 불행히도, 거기에 남아 여전히 한 줄. 말 그대로 임시 지금 무엇입니까? 그것은 분명 번호 하나입니다. 그 주소가 아닙니다. 그것은 일종의 단지 숫자의 주 하나의 변수입니다. 그리고 지금 당신은 스타 B는 것을 의미 말할 때 주소 B로 이동하는가이다 여기에 물론. 그래서 일단 당신이 거기에 도착 - 내가 가서 실제로 무엇을 삭제합니다 가 - 당신은 무엇이다 위치 127 지금 쓰려고? 찰리 : 온도, 하나입니다. DAVID 마란 : 온도, 하나입니다. 그리고 결국 임시로 어떻게됩니까? 음, 우리는 정말 모르겠어요. 우리가 정말 상관 없어. 우리는 기능을 구현 한 모든 시간 지금까지, 모든 지역 변수가있다 실제로 지역입니다. 그리고 그들은 그냥 사라집니다. 그들은 작동 회수하고 결국 시스템입니다. 그래서 온도는 여전히이 있다는 사실을 값 1은 일종의 근본적이다 우리에게 재미. 좋아, 그래서 박수 우리는 찰리 수 있다면. 아주 잘 했어. 좋아, 그래서 더한다 이것은 우리가 할 수있는 것은? 그래서 우리가 있었다는 것을 밝혀 몇 가지 흰색 거짓말을 꽤 많은 시간 동안. 사실, 그것은 그 문자열을 밝혀 이 모든 시간이 정말 없습니다 본질적으로 일련의 문자. 그것은 어떤 종류의 직관적이다. 그러나 엄밀히 말하자면, 문자열입니다 우리가 내부에서 선언 된 데이터 유형 세상을 단순화하기 위해 CS50 라이브러리 클래스의 처음 몇 주 동안. 어떤 캐릭터가 정말하는 주소입니다 어딘가 RAM의 문자. 문자열은 123처럼, 정말 번호 구별하는 일 또는 127, 문자열에서 시작 위치 컴퓨터의 메모리. 그러나를 나타내지 않는 문자열 라기보다는 그 자체. 우리는이 다음과 같이 볼 수 있습니다. 내가 가서 열어 보자 사이의 몇 가지 코드 오늘의 소스 코드 예제. 내가 가서 열거야 최대, 비교 - 0.c, 보자. 이 것입니다 버그 프로그램입니다 다음과 같이 구현한다. 첫번째로 올려주세요. 내가 뭔가를 말할거야. 그럼 앞서 갈 건데 사용자로부터 문자열을 그 다음 행합니다. 그럼 내가 다시 말할거야. 다음 나는 다른 줄게 사용자로부터 문자열입니다. 통보, 나는 중 하나를 보여주는거야 의라는 변수에 문자열 및 이러한 문자열의 또 다른 t라는 변수있다. 지금은 매우, 요구하는거야 합리적들 같으면 t 같은지 문자열은 동일합니다. 당신은 같은 일을 입력합니다. 그렇지 않으면, 문자열은 동일하지 않습니다. 결국, 우리가 입력 두 정수, 두 경우 문자, 두 개의 수레, 두 복식의 우리가 얘기 한 데이터 유형 지금까지 그들을 비교 - 우리는 얼마 전 매우 분명하게 기억합니다 이 작업을 수행하지 않는 것이 있기 때문에 단일 등호 물론입니다 할당 연산자. 그래서 버그가 될 것입니다. 우리는 동등한 등호를 사용, 참 비교되는 진정한 평등 확인해보세요. 하지만이 버그가 주장한다. 내가 가서 영을 비교하는 경우는, 그리고 도트 슬래시 제로를 비교합니까. 나는 안녕하세요, 보자에 입력합니다. 그리고 다시 한 번 인사를하자. 말 그대로 같은 것, 컴퓨터 나는 다른 일을 입력 주장. 이제 어쩌면 내가 뭔가를 잘못 입력. 내 이름이 시간을 입력합니다. 내 말은, 안녕하세요. 안녕하세요. 그것은 매번 다릅니다. 글쎄, 이유는? 정말 무슨 일인지 후드 아래? 그럼, 정말 아래에있는거야 후드는 문자열 내가 예를 들어 첫 시간에 입력 단어는 물론, 안녕하세요있다. 그러나 우리는 아래에이 표시하는 경우 후드는 기억이 문자열 배열입니다. 그리고 우리는 과거에 많이 말한. 내가 이렇게 그 배열을 그릴 경우에, 난 확실히 뭔가를 표현하는 것 우리는 잠시 전에했던 것과 유사. 뭔가 실제로있다 여기에서 특수. 우리는에서 무슨 일을 한 결정 않았다 각 문자열의 끝? 그래, 백 슬래쉬 제로가되는 것입니다 대표 단지 방법 말 그대로, 00000000. 행 8 개의 0 비트입니다. 나는 솔직히 모르겠어요 이 후거야. 그건 그냥 잔뜩 더 많은 RAM의 내 컴퓨터의 내부입니다. 그러나 이것은 배열입니다. 우리는 전에 배열에 대해 이야기했다. 우리는 일반적으로 배열에 대해 이야기 위치 제로 것으로, 그 다음 하나, 둘. 하지만 그건 단지 편의를 위해이다. 그리고 그것은 완전히 관계이다. 당신은 실제로의 메모리를 받고있을 때 컴퓨터, 그것은 물론 어떤의의 20 억 일부 홀수 바이트, 잠재적으로. 그래서 정말 후드 아래, 모든 시간, 예. 이것은 매우 잘 브래킷 제로 될 수 있습니다. 하지만 당신은 아래에도 깊이 파고 경우 후드, 그건 정말이야 번호 123를 해결. 이 주소 124입니다. 이 주소 125. 그리고 나는이 시간을 망치지 않았다. 이 지금은 한 바이트 떨어져 어떤 이유? 문자가 얼마나 큰? 문자는 한 바이트이다. INT는 일반적으로 4 바이트입니다. 내가 123을 한 이유 때문에 즉,의 127, 131 등. 지금은 수학 간단하게 유지할 수 있습니다 그냥 1을 더한 않습니다. 그리고 지금은 정말 무슨이다 후드 아래에. 당신이 뭔가를 선언 그래서 때 s 문자열이 사실이다 - 그것은 밝혀 - 문자 스타. 스타는 물론 의미 주소, 일명 포인터. 그래서 뭔가의 주소입니다. 무엇의 주소입니다? 잘 - 나는 매우를 볼 수있는 유일한 사람이야 중요한 점은 내가 만드는, 또는 생각 해요 내가 만들고있어. 그래서 문자열 - 슬픈 것은 제가 모니터가있다 거기 어디 것을 볼 수 있었다. 좋아요, 문자열들 무엇 나는 이전에 선언했다. 하지만 조금 덕분에 밝혀 CS50 도서관에서 마법이 모든 시간 문자열이 그대로있다 문자 별이었다. 별은 다시 의미 포인터 나 주소입니다. 그것은 측면을 노릴는 사실 단어 문자는의 의미 문자의 주소입니다. 문자열이라고 얻고, 내가 입력 그렇다면 H-E-L-L-O에서 얻을는지 지금 제안 문자열은 문자를 모두 반환하고 이 시간, 우리는했습니다 오히려하더라도 세계를 단순화? 문자열을 실제로 얻을 무엇입니까 그것의 반환 값으로 반환? 이 경우 123 예를 들어. 우리는 이전에 문자열을 얻을 말한 단순히 문자열의 시퀀스를 반환 자. 하지만 그 하얀 거짓말의 비트입니다. 방법은 문자열이 진짜로 작동 얻을 후드 아래에 그것을 가져입니다 사용자로부터 문자열입니다. 그것은 그 문자를 풍덩 메모리에 그 또는 그녀는 형식입니다. 그것은 끝에 백 슬래시 제로를두고 문자 그 순서. 하지만 문자열 나올까요 그대로 반환? 그것은 문자 그대로의 주소를 반환 RAM의 첫 번째 바이트가 그것은 그 강도에 사용됩니다. 그리고 그것은 반환하여 해당 단지 밝혀 의 단일 주소 문자열의 첫 번째 문자는, 그입니다 의 전체를 찾기위한 충분한 문자열입니다. 즉, 문자열이없는하세요 123 124 125 반환합니다. 그것은 나에게 긴 줄이 없습니다 그 바이트의 모든 목록 내 문자열을 사용하고 있습니다. 하나 때문에, 그들은 백업하는 모든 돌아온다. 그리고, 첫 번째 주소에 두를 기반으로 문자열이 끝나는 위치를 알아낼 수 있습니다. 어떻게? 특수 널 문자, 마지막에 제로 백 슬래시. 그래서 다른 말로, 만약 당신은 주위에 전달 - 변수의 내부 - 문자의 주소, 당신은 가정 모든 문자열의 끝에서, 모든 것을 우리 인간과 같은 일련의 문자 당신이 가정하는 경우, 문자열의 생각 거기에 이러한 문자열의 끝에서 백 슬래시 제로, 당신은 황금입니다. 당신은 항상 찾을 수 있기 때문에 문자열의 끝. 이제 정말로 그 거예요 이 프로그램에? 왜이 프로그램입니다 비교 - 0.c, 버그? 실제로 어떻게 비교되고 있는가? 그래? 학생 : [들림]. DAVID 마란 : 그렇습니다. 그것은 위치를 비교하는 것 문자열. 사용자가 인사 한 번에 입력했습니다 그렇다면, 내가 그랬던 것처럼, 메모리 끝날 수도 이처럼 보이는. 다시 인사에서 사용자가 다음 유형의 경우, 그러나 다시 문자열을 호출하여 C는 당신은 특히 영리 가르쳐주지 않는 그것은 코드를 작성하여 영리합니다. C - 더 일반적으로, 컴퓨터 - 당신은 안녕 다시 단어를 입력하면, 당신은 당신이받을거야 알아. 당신은 두 번째 배열을받을거야 메모리 즉, 예 수를 발생 H-E-L-L-O를 저장하고 등등. 그것은에 같은 모양 것 우리 인간 만이 주소 123하지 않을 수 있습니다. 그것은 그냥 일어날 수있는 운영 체제에서 사용 가능한 일부가 위치 예를 들어 공간 - 임의 뭔가 말을하자, 이 같은 위치 200입니다. 이 위치 201입니다. 이 위치 202입니다. 우리는 그건 아무 생각이 없다 메모리에 될 것이다. 그러나이 의미하는 것은 무엇인가 있다는 것입니다 s에 최종적으로 저장 될 것? 번호 123. , t에 저장 될 무슨 이 임의의 예? 번호 200. 그리고 그 다음 의미 모두가 분명히 123 200 동일하지 않습니다. 그리고이 절대 조건이있는 경우 true로 평가합니다. GET 문자열이 서로 다른 사용하고 있기 때문에 메모리 덩어리마다. 이제 우리는이에게 다시 볼 수 있습니다 또 다른 예있다. 내가 가서 복사 0.c을 열 수 있습니다. 나는이 예제가가는 주장 시도 -하지만 실패 - 두 문자열을 복사 할 수 다음과 같다. 내가 뭔가를 말할거야 사용자에게. 그때를 얻을거야 문자열과 그것의 호출합니다. 그리고 지금, 여기이 검사를하고 있어요. 우리는이 동안을 다시 언급했다. 그러나시는 문자열 null이 반환을 얻을 수 있습니다 다른 특수 문자 또는 특수 기호하자 말한다. 그것은 메모리 부족의 경우. 예를 들어, 사용자가 실제로있는 경우 흉포 어려운 유형 인 의 문자 수 키보드와 안타 입력합니다. 문자의 수는 단지 수없는 경우 미친 뭐든 RAM에 맞게 이유는 잘 문자열 수도 얻을 잘 NULL을 반환합니다. 또는 프로그램 자체가 많은 일을하는 경우 다른 것들과 거기의 GET 문자열에 대한 메모리가 충분하지 않습니다 성공하려면, 그것은 종료 될 수 있습니다 널 (null)을 반환까지. 그러나의 더 정확한하자 이것이 무엇으로. 의 데이터 형식은 정말 무엇입니까? 문자 스타. 그래서 지금 우리는 껍질을 수 밝혀 널의 레이어를 백업합니다. 밝혀 NULL입니다 - 네, 분명히 특수 기호. 하지만 정말 무엇입니까? 정말, 널 (null)은 심볼이 우리 인간뿐만 아니라 제로를 표현하기 위해 사용합니다. C의 저자 및 컴퓨터 때문에 더 일반적으로, 년 전에 결정 즉, 당신은 무엇을 알고있다. 왜 우리는 보장하지 않는 사용자가 없습니다 데이터 적, 적, 적입니다 안녕 제로에 저장? 사실, 심지어 내 임의의 예 전에, 나는의 번호를 시작하지 않았다 제로 바이트입니다. 나는 1에서 시작했다. 나는 세계에서 사람들을 알고 있기 때문에 제로 예약하기로 결정했습니다 누구의 RAM 등의 바이트 특별한 무언가. 그 이유는되고, 언제든지 당신이 원하는 뭔가 잘못 간 것을 신호 주소와 관련하여, 당신은 반환 널 (null) - 그렇지 않으면 0으로 알려진 - 그리고 당신은 거기에 있다는 것을 알고하지 않기 때문에 분명히, 주소, 제로로 데이터를 합법 그 오류를 의미합니다. 그리고 우리는 규칙에 의해 확인 이유 null이 반환 무엇인가 이러한 경우 같은. 우리는 지금 아래로 스크롤 그렇다면,이 단지 다음 몇 가지 오류 검사, 단지의 경우 뭔가 [와 잘못된? 보석?] 모두하고 프로그램을 종료 초기에 반환하여. 이 라인은 이제 다시 작성할 수 있습니다 이 같이, 이것은 무엇을 의미? 왼쪽에 저에게 다른 줄 캐릭터, 그것은 t 전화에 대한 포인터. 나는 바탕으로, T의 내부에 무엇을 저장하고 이 코드 한 줄에? 나는 위치를 저장하고 있습니다. 특히 위치 그 s에 있었다. 사용자가 인사에 입력하고있다 그렇다면 첫 안녕하세요 결국 발생 여기에 다음 번호 123은 얻을에서 돌아올 예정 문자열을 저장할 수 - 우리는 앞서 말한대로 - 의합니다. 지금은 또 다른 포인터를 선언 할 때 문자와 전화 t는 숫자는 무엇입니까 문자에 종료 예정 이야기에 따라 t? 123 그래서. 그래서 기술적으로 지금의 두 t는 정확한를 가리키는 메모리 같은 덩어리. 그래서 지금 할거야 통지 이 프로그램은 버그가 증명. 우선 내가 주장하는거야 인쇄 F, 대문자 문자열의 사본. 그럼 내가 좀 할거야 검사 오류가 발생했습니다. 나는 확실히 만들려고 해요. 하자 문자열 t가에 있는지 확인 최소 길이가 0보다 크면, 그래서 일부 문자가있다 실제로 활용할 수 있습니다. 그리고 당신은이 호출 할 수 앞의 예에서. 상단 2 -에 ctype.h 파일입니다. T 브래킷 제로 나에게 제로 제공 문자열 t의 문자입니다. 의 동일한 값의 상위 2, 물론, 그것은 대문자로 변환합니다. 그래서 직관적으로,이 라인을 강조 코드의 첫 번째 대문자입니다 T의 편지입니다. 그러나, 직관적으로, 대문자 아니에요 의에서 첫 번째 문자입니다. 당신이 먼저 생각한다면, 내가 뭘 오전 나는이 프로그램을 실행할 때보고 소개 그리고, 원래 모두 인쇄 s 및 소위, 복사, t? 실제로는 동일 할 것입니다. 그리고 왜 그들은 동일한 것으로 건가요? 그들은 가리키는있어 두 정확히 같은 것. 그럼 이렇게하자. 복사 제로한다. 그것은 OK 컴파일합니다. 나에게 복사본 제로를 실행하자. 나에 안녕과 같이 입력하자 모두 소문자로 입력 한 다음 Enter를 누르십시오. 그리고 주장하는 원래의 두 그리고 사본은 참으로 동일합니다. 그래서 정말 여기에서 무슨 일? 내가이 그림을 그냥 그리하자 의 이야기를 약간 다른 방법입니다. 무엇이 정말 아래에 일어나고 내가 뭔가를 선언 후드 문자 시작의, 또는 문자열 S, 내가 포인터를 얻고 - 이는 4 바이트로 발생 CS50 어플라이언스 및 컴퓨터를 많이합니다. 그리고이의를 호출하는거야. 그리고 현재이 알 수없는 값입니다. 당신은 변수를 선언 할 때,하지 않는 한 자신이 거기에 누가 값을 입력 거기에 무엇을 알고있다. 그것은 어떤 임의의 순서의 수 이전 실행에서 비트입니다. 그래서, 코드 내 라인에 들어갈 수행 할 때 문자열 및 다음 반환을 저장 초 값은 어떻게 든 문자열을 - 우리는 결국 얼마나 다시 껍질을 거 문자열 작품은, 어떻게 든을 할당 아마 보인다 배열 이 같은 비트. H-E-L-L-O, 백 슬래시 제로. 이 주소인지의이 가정하자 123 단지 첫 번째 일관성. 그래서에 문자열을 반환받을 이 라인을 강조, 그것은을 반환 수 우리는 123이다. 그래서 정말 여기의 내부 간다? 음, 정말 무엇을 간다 내부의의 123입니다. 하지만 솔직히, 내가 좀 받고 있어요 이러한 모든 주소에 의해 혼동, 이러한 임의의 숫자의. 123, 124, 127. 그럼 실제로 간단하게 세계는 조금. 우리는 솔직히 포인터에 대해 이야기 할 때에 우리 인간, 누가 도대체​​ 어디에 관심 물건은 메모리에있는? 그것은 완전히 임의의. 그것은 방법에 따라 달라집니다 것 많이는 사용자가 가지고있는 RAM. 그 때 하루에 의존하는 것 당신은 아마 프로그램을 실행하고, 어떤 입력은 사용자를 제공합니다. 우리는 중요하지 않은 세부 사항에 거주입니다. 그래서하자 추상화하고 말을, 이 같은 코드 줄을 실행하면, 문자 스타들 수익을 얻는다 GET 문자열 값입니다. 왜 우리는 대신 우리 그리지 않습니다 그건 것처럼 포인터를 호출 유지 뭔가 가르키는? 그래서 나는 그의 지금 주장 포인터가 - 후드 아래는 주소입니다. 그러나 그것은 단지를 가리키는 의 첫 번째 바이트 문자열이이 반환되고있어. 나는 지금 여기에 코드를 반환하는 경우, 어떤이 줄거야? 자, 이제이 강조 라인, 나는 분명히 또 다른 선언 해요 t라는 변수입니다. 그러나 그것은 또한 포인터, 그래서 나는거야 정확한 이론적으로 그것을 그릴 같은 크기의 상자. 그리고 나는 그것이 t를 호출하는거야. 그리고 지금 우리는 다시 코드로 돌아가 경우, I t는 s의 내부를 저장할 때, 나는 기술적 뭐야 T의 내부에 넣어? 물론 기술적으로,이 번호 123이었다. 그래서 정말 내가 작성되어야한다 이 번호 123. 그러나의이 높은 수준을 보자. T, 단지 포인터 인 경우, 직관적으로, 단지이다. 그 존재의 전부 그건 거기에 저장됩니다. 이제 마지막으로 흥미로운 라인 코드의 사실에 대해 갈 때 제로 문자를 대문자 t에서, 무슨 일입니까? 물론, T 브라켓 제로는 이제 가리키는 무엇을 문자, 아마? 그것은 시간에 가리키는. 때문에 T 브래킷 제로 - 기억이 오래된 구문입니다. T 브래킷 t는, T 문자열 인 경우 제로 단지 의미 브래킷 제로 제로 점점 의미 그 강도 특성. 정말 의미 그래서 이 배열로 이동합니다 - 그리고 예, 이것은 123 수 있습니다 이 124이 될 수 있습니다. 하지만 모든 상대의 기억. 배열에 대해 이야기 때마다, 우리는이 이야기의 장점 상대 지수. 그리고 이제 우리는 가정 할 수있다 그 T 브래킷 제로 시간이다. 나는 그것에 2 위 전화 그렇다면, 어떤 것이이다 정말 대문자로되어 일을 대문자 H로 소문자 시간 물론 S는 무엇입니까? 그것은 같은 이놈의 문자열 가리키는. 그래서는 일이 있었 모든 것을 이 코드에서 지금까지. 그래서 의미는 무엇인가? 우리는이 두 가지 문제를 어떻게 해결합니까? 우리는 어떻게 실제 문자열 비교합니까? 잘 직관적으로 어떻게 것 두 개의 비교에 대한 이동 진정한 평등의 문자열? 그것은 무엇을 의미 하는가하면 두 문자열은 같다? 명확하지 자신의 주소가 있다는 것을 그 낮은이기 때문에, 메모리와 동일 수준의 구현 세부 사항입니다. 모든 문자는 동일합니다. 그래서 내가 제안하자, 저를 소개하겠습니다 compare.c 버전 하나 여기에, 그래서 비교-1.C. 우리는 여전히를 얻을 내가 제안하자 의라는 포인터, 그리고에 저장 GET 문자열의 값을 반환합니다. T와 같은 일을하자. 그래서 코드 중 어느 것도 다르지 않습니다. 조금을 추가 할거야 지금 확인 더 많은 오류가 발생했습니다. 그래서 지금 우리가 다시 필링의 일종임을 어떤 문자열 CS50이 레이어 실제로, 우리는 항문해야 확인하고 관하여 우리는 남용하지 널 (null)과 같은 잘못된 값. 그래서 난 그냥 확인하는거야. 의 동등한 NULL을하지 않는 t는되지 않는 경우 동일한 null의 경우, 그것은 우리가 OK입니다 의미합니다. 문자열은 점점 엉망하지 않았다 받으세요 하나 이러한 문자열. 그리고 당신은 아마 지금 추측 할 수있는 STR CMP는 아마도합니까? 문자열을 비교합니다. 당신은 전에 자바 프로그램을했습니다 경우에, 이있는 동등한 방법처럼 문자열 클래스입니다. 하지만이 분들을 위해 전에 프로그램, 이것은 단지 C 함수이다. 그것은에 와서하는 일 파일 string.h에를했다. 이 선언 된 곳이다. 그리고 문자열 비교 - 실제로 그 사용을 잊지 것은, 하지만 그 마음을하지 않습니다. 우리가 할 수있는 기억 사람, 비교를 저어. 그리고이를 가져올 것입니다 리눅스 프로그래머 설명서를 참조하십시오. 그리고, 솔직히 좀 애매이다. 하지만 네, 그 여기에서 볼 수 있습니다. 나는 string.h에 포함해야합니다. 그리고 "설명에 따라 여기있다 문자열 비교 함수는 비교 두 개의 문자열 S1 및 S2. "그리고 S1 과 S2는 분명히 이아르 인수가 전달 된 정말 기억하지 않는 것을 CONST는,하지만 지금은 알 - 때 당신은 이미 이것을 볼지도 모른다 당신은 매뉴얼 페이지를 사용할 수있는 경우에, 당신 모든 것을 가지고 - 그 문자 별은 동의어이다 문자열. 그래서 두 개의 문자열 S1을 비교 S2, 그것은 작은 정수를 반환 보다 작거나 같거나 0보다 큰 S1이 발견되면, 각각 수 보다 작거나 일치하거나, S2보다 큰. 그건 그냥 말하는 매우 복잡한 방법 해당 문자열 반환을 비교 0 2 문자열은 직관적 경우 에 대해 동일한 문자 문자에 대한 문자. 그것은 음수를 돌려줍니다 (존재하는 경우) S, 알파벳가되어있다 t 앞에 와야합니다. 또는 양수하는 경우를 반환 의는 t는 올 예정이다 알파벳. 그래서이 간단한 기능으로, 수 당신은, 예를 들어, 정렬 단어의 전체 무리? 그래서이 새로운 버전에서, 내가 갈거야 가서 compare1를 만들 수 있습니다. 점 슬래시 하나를 비교합니다. 나는 모든 소문자로 안녕하세요를 입력합니다. 나는 안녕하세요를 입력 할거야 다시 모두 소문자로한다. 그리고 다행히 지금은 실현 저도 같은 일을 입력했습니다. 한편,하면 낮은에 안녕을 입력 케이스와 대문자 안녕하세요 그들을 비교, 내가 입력 여러 가지. 때문 만이 주소는 다른, 그러나 우리는 비교하고 또 다시 다른 문자입니다. 우물 하나를 가서 해결하자 이제 다른 문제. 저 버전을 열어 보자 현재 주소 복사 이 문제는 다음과 같습니다. 이 하나 보일 것 좀 더 복잡한. 하지만 당신은 어떤 문제에 대해 생각하면 우리 해결해야 희망이 될 것입니다 지금은 잠시 해제합니다. 그래서 첫 번째 줄, 문자 시작 t에서 쉽게 설명하자면 누군가가 제안 할 수 이 줄은 무슨 의미? 문자 별 t는 일을하는 무엇입니까? 좋아요. 일부 포인터를 만들 메모리에 자리. 그리고 내가 그것을 조금 수정하자. 를 저장할 변수를 선언합니다 메모리에 일부 문자의 주소, 단지 좀 더 적절한 수 있습니다. OK, 이제 오른쪽에, 내가했습니다 이러한 기능 중 하나를 본 적이 이전 malloc에​​. 그러나 그것은 무엇을 의미할까요? 메모리 할당. 메모리 할당. 그래서 우리는 지금까지 밝혀, 정말의 강력한 방법이 없었어요 운영 체제를 묻는 좀 메모리를 제공합니다. 오히려, 우리는 지금이라는 기능을 가지고 바로 이러한 malloc에​​. 이것은 약간의 경우에도 산만 지금 알 수있는 것 두 괄호 사이 단지 숫자가 될 것. 나는 질문에 입력 한 위치를 표시는 숫자가 될 수 있습니다. 그리고 그 숫자는 의미 저에게 10 바이트를 제공합니다. 저에게 20 바이트를 제공합니다. 나에게 100 바이트를 제공합니다. 그리고 malloc을이 위해 최선을 다할 것입니다 운영 체제를 요청할 - 이 경우 리눅스 - 이봐, 그 100 바이트입니다 사용 가능한 RAM의? 이 경우에 저에게 그 바이트를 반환 그중의 주소를 반환 아마도 그 바이트? 하나의 매우 첫번째로 올려주세요. 그래서 여기 너무 - 그리고이 우세 C, 당신이있어 어느 시간에 주소 다루는? 당신은 거의 항상 다루고 최초의 주소, 아무리 큰 당신이되고있는 메모리 청크 말하자면, 다시 주었다. 그래서하자 여기에 다이빙. 내가 어떻게 할당하려 바이트, 정확히? 잘. 의의 문자열 길이 -하자 구체적인 예를 수행합니다. 의 헬로 경우, H-E-L-L-O, 무엇 의의 문자열 길이, 분명? 그래서 다섯이다. 하지만 난 그 이유에 1을 더한 일을 해요? 이유는 6 바이트를 원하는 다섯 대신? null 문자. 나는이를 떠나고 싶지 않아 특수 null 문자. 때문에여의 복사본을 만들 경우 단지 H-E-L-L-O 수행하지만 난 두지 않는다 그 특수 문자, 컴퓨터 기회, 백 슬래시가없는 수 거기에 나를 위해 제로. 그래서 나는 알아 내기 위해 노력하고있어 경우 복사의 길이는, 내가 생각하는 그 그것은 20 자, 또는 만 난 그냥 일어나지 않을 경우, 긴 문자 백 슬래시 제로에 충돌합니다. 그래서 우리는 6 바이트를 저장해야 H-E-L-L-O, 백 슬래시 제로. 그리고 이것은 단지 슈퍼 항문 수 있습니다. 잊지한다고 가정 무엇 문자의 크기입니다. 우리는 그것의 한 바이트를 말하는 유지합니다. 그리고 일반적이다. 이론적으로, 그것은 뭔가 될 수 다른 Mac 또는에서 서로 다른 다른 PC. 이 연산자 거기 밖으로 그래서집니다 SIZEOF라고하는 당신은을 전달하는 경우 데이터 형식의 이름 - 같은 문자, 또는 int 또는 부유물 - 그것은 얼마나 많은 동적, 당신을 말할 것이다 바이트 문자가 이것에 걸립니다 특정 컴퓨터. 그래서 효과적으로 단지 시간 1 또는 말처럼 모두의 시간은 아무것도하지 않습니다. 하지만, 그냥 슈퍼 항문으로하고 있어요 이럴 경우 문자가 다릅니다 컴퓨터에 대 광산,이 방법에 수학은 항상 확인하는 것입니다. 마지막으로, 아래로 여기가 null 확인 이는 항상 좋습니다 - 다시, 우리는 포인터를 다루고있는 시간입니다. malloc을주고 할 수 없습니다 경우 저 여섯 부전승 -입니다 가능성,하지만 단지의 경우 - 즉시 하나를 반환합니다. 그리고 지금, 가서 복사 문자열은 다음과 같습니다. 그리고는 익숙한 구문 다른 역할이기는하지만. 내가 가서 문자열을 얻을거야 의 길이와 N에 저장합니다. 그때 나는 내가 동등한에서 반복 할거야 ,와 N 등까지 제로 보다 크거나 같음. 각 반복에, 내가 넣어 수 있도록 i 번째에있는 s의 i 번째 문자 T의 문자입니다. 그래서 정말 아래에 일어나고 여기에 후드? 그럼이 경우, 예를 들어, s의 - 나는 단어를 H-E-L-L-O에서 입력 한 백 슬래시 제로가있다. 그리고 또,이들 여기를 가리키는 것입니다. 그리고 지금 여기에 t입니다. 그리고 이것은 지금 가리키는 메모리의 복사, 맞죠? malloc에​​ 저에게 전체를 제공하고 있습니다 메모리 덩어리. 나는의 처음 모르겠어요 이러한 위치의합니다. 그래서 이들과 같은 생각하는거야 물음표의 전체 무리. 하지만 최대한 빨리 시작할 때 0에서 반복 S, T의 길이를 통해에 브래킷 제로 T 브래킷 1 - 나는 지금 놓을 게요 오버 헤드 - T 브래킷 제로의 부류 제로 의미 내가 복사 할 거라는 여기 반복적으로 H, E-L-L-O. 플러스는 플러스를했기 때문에 1 백 슬래시 제로. 그래서 지금 비교-1.C의 경우, 결국, 나는 밖으로 인쇄하는 경우 T의 대문자, 우리는해야한다 들 변하지 것을 알 수있다. 내가 지금 가서이 작업을 수행 할 수 있습니다. 그래서 COPY1을합니다. 점 슬래시 COPY1. 나는 안녕하세요, 입력을 입력 할거야. 지금 만 사본을 통지 대문자로되어 있습니다. 나는 정말이 있기 때문에 두 개의 메모리 덩어리. 불행하게도, 당신은 꽤 작업을 수행 할 수 있습니다 여기에 나쁜 꽤 위험한 확인해보세요. 내가 지금 여기에 예제를 당겨 보자 그것은 우리에게 몇 가지의 예를 제공합니다 다른 라인. 그래서 그냥 직관적으로, 여기에 첫 번째 줄 코드는 int 별 X가 선언된다 X라는 변수. 그리고 데이터 유형은 무엇입니까 이 변수? 그 변수의 데이터 유형은 무엇입니까? 즉, 클리프 행어되지 않았습니다. 데이터 타입은 INT 스타입니다. 그래서 무엇을 의미합니까? 여기서 x는 것 INT의 주소를 저장합니다. 그렇게 단순 한. Y는을 저장하는 것입니다 INT의 주소입니다. 세 번째 라인은 무엇인가 코드가 어때? 그것은 할당 얼마나 많은 바이트 가능성이 높습니다? 네. 때문에 INT의 크기입니다 일반적으로 네, 네 malloc에​​가 있습니다 나를 덩어리의 주소를 다시 메모리는, 그 바이트의 첫 번째는 X 지금 저장됩니다. 이제 우리는 신속하게 조금 이동하고 있습니다. 스타 X는 무엇을 의미? 그것은 그 주소로 이동을 의미합니다 무엇을 거기에 번호 넣어? 하여 숫자가 42을 넣어. 스타 Y는 Y에 무엇 이동 수단 거기에 숫자 13을 넣어. 그러나 분을 기다립니다. 순간 Y에 무엇이 있는가? 어떤 주소는 y를 저장인가? 우린 몰라? 우리는 한 번 할당을 사용하지 않은 Y를 포함하는 연산자입니다. 그래서 Y는 두 번째 줄에 선언 코드는 어떤 쓰레기 값이 큰 물음표 말하자면. 그것은 무작위로 지적 될 수있다 메모리에 아무것도, 그 일반적으로 나쁘다. 그래서 곧 우리가 그 라인을 쳐서 스타 y를, 나쁜 짓을 13과 동일 아주 나쁜 일이 약 빙키에 발생합니다. 그래서 결국 무슨 일이 일어나고 있는지 살펴 보자 이 분 여기 빙키 일어나고 또는 이렇게 본다. [동영상 재생] - 안녕, 빙키. 일어나. 그것은 포인터 재미를위한 시간이다. - 뭐라 구요? 포인터에 대해 알아? 아, 좋아요 ~. - 그럼, 시작하는, 우리는 것 같아요 몇 포인터를 필요로하는 것. -OK. 이 코드는 두 개의 포인터를 할당 이는 정수를 가리킬 수 있습니다. -OK, 음, 나는 두 개의 포인터를 참조하십시오. 하지만 그들은되지 않는 것 같습니다 무엇을 가리키는. - 맞아. 처음에 포인터는하지 않습니다 무엇을 가리 킵니다. 그들은 가리 것들이이라고 pointees, 최대를 설정은 별도의 단계. - 오, 그래, 맞아. 나는 그것을 알고 있었다. pointees 별도입니다. 그렇다면 당신은 pointee를 할당합니까? -OK. 물론,이 코드는 새로운 정수를 할당 pointee,이 부분은 X를 설정 그것을 가리 키도록. - 이봐, 잘 보인다. 그래서 뭔가를합니다. -OK. 나는 역 참조 포인터 x를 저장할 수 있습니다 그 pointee에 번호 42. 이 트릭을 위해, 나는 내 마법이 필요합니다 역 참조의 지팡이. 역 참조의 마법 지팡이? 어, 정말이다. -이 코드가 어떻게 생겼는지입니다. 난 그냥 번호를 설정하고 있습니다 - - 이봐 요. 거기 간다. 그래서 x는 다음에 역 참조를하고 그 pointee에 액세스하는 화살표. 이 경우, 거기에 42을 저장합니다. 이봐, 번호를 저장하기 위해 그것을 사용하십시오 다른 포인터를 통해 13 일 y를 입력합니다. -OK. 난 그냥 y로 여기에 갈거야 숫자 13이 설정됩니다. 다음의 지팡이를 가지고 역 참조 단지 - 우와! - 오, 이봐. 그것은 작동하지 않았다. 빙키 말하자면, 나는 생각하지 않는다 Y를 역 참조하는 것은 좋은 생각이다 pointee을 설정하기 때문에 별도의 단계입니다. 그리고 나는 우리가 이제까지했다고 생각하지 않습니다. - 흠. 좋은 지적. - 그래, 우리는 포인터 y를 할당. 그러나 우리는 그것을 설정하지 pointee을 가리 킵니다. - 흠. 매우 관찰력. - 이봐, 당신은 찾고 거기에 좋은, 빙키. 당신은 Y 포인트 있도록 문제를 해결할 수 X 같은 pointee에? - 물론. 나는 내 마법 지팡이를 사용합니다 포인터를 지정합니다. -되어있는이 될 것 전에 같은 문제? - 아니. 이 pointees를 만지지 않습니다. 그냥 가리 한 포인터를 변경 또 같은 일을. - 오, 내가 참조하십시오. X 같은 장소에 지금 y를 가리 킵니다. 그래서 기다립니다. 이제 Y가 고정되어 있습니다. 그것은 pointee 있습니다. 그래서 당신은 지팡이를 시도 할 수 있습니다 다시 역 참조 이상 13 보낼 수 있습니다. -OK. 여기 간다. - 이봐, 봐. 이제 Y의 작품을 역 참조. 그리고 포인터가 공유되기 때문에 하나 pointee, 그들은 모두 13를 참조하십시오. - 그래. 공유. 뭐든간에. 그래서 우리는 지금 스위치 장소를가는거야? - 오, 봐. 우리는 시간이 없어. -하지만 - - 그냥 세 가지를 기억 포인터 규칙. 번호를 하나의 기본 구조 당신이 포인터를 가지고있다. 그리고 pointee을 통해 가리 킵니다. 하지만 포인터와 pointee 별도이다. 그리고 일반적인 오류에있다 포인터를 설정하되 pointee을 부여하는 것을 잊지. 둘째, 포인터 역 참조가 시작 포인터에서 다음과 그것 화살표에 그것의 pointee에 액세스합니다. 우리 모두가 알다시피, 이것은 단지 작동하는 경우가 로 돌아 오면 pointee입니다 번호 하나를 지배. 셋째는, 포인터 할당합니다 하나의 포인터 변경이 가리 키도록 다른 포인터와 같은 pointee. 그래서 할당 한 후, 두 포인터는 것 같은 pointee을 가리 킵니다. 가끔이 공유라고. 그리고 정말 그것이 전부입니다. 이제 안녕히. [END 동영상 재생] DAVID 마란 : 포인터에 따라서 더 빙키 다음 주에 더 많은. 우리는 월요일에 당신을 볼 수 있습니다.