>> 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 마란 : 포인터에 따라서 더 빙키 다음 주에 더 많은.
우리는 월요일에 당신을 볼 수 있습니다.