[Powered by Google Translate] [제 6] [더 편안한]
[롭 보덴] [하버드 대학]
[이 CS50 수 있습니다.] [CS50.TV]
>> 우리는 질문의 섹션으로 향 할 수 있습니다.
제가 먼저 공간의 URL을 보냈습니다.
질문의 섹션의 시작 말 -
분명히, 난 아주 쉬운 질문 병 들지 않게이 -이 완전히 안
valgrind는 그냥 뭐죠?
valgrind는 무엇입니까?
누구나 valgrind는 무엇을 말할까요?
[학생] 체크 메모리 누수.
네, valgrind는 일반 메모리 검사기입니다.
어떤 메모리 누수가있는 경우는, 결국, 당신을 알려줍니다
이것은 당신이 원하는 경우 우리 때문에 위해 사용중인 대부분 is
문제 세트에 또는 원하는 경우 잘
큰 탑승, 당신은 전혀 메모리 누수가 없습니다 필요
그리고 경우에 당신은 당신이 찾을 수있는 메모리 누수가
당신은 파일을 열 때마다 해당 염두에 두어야
그리고 그 파일을 종료하지 않을 경우, 그 메모리 누수입니다.
>> 많은 사람들이 그들이 자유롭게하지 않는다는 것을 어떤 노드를 찾고 있습니다
때 정말, 그들은 첫 단계에서 사전을 닫지 않았습니다.
또한, 어떤 잘못이있는 경우 읽기를 알거나 기록
당신이 시도하고 값을 설정하면 그 말은
그 힙의 마지막 넘어이고 감금 잘못이에게 무슨 일이되지 않습니다
하지만 valgrind는, 당신이 실제로 작성하지 말아야으로 그것을 잡는다
그래서 당신은 확실히 그 중 하나의가 없어야합니다.
당신이 어떻게 valgrind 사용합니까?
>> 그것은에 대한 일반적인 질문입니다
의 종류를 실행하고 출력 좀 봐.
출력은 시대의 많은 부담을주지 않습니다.
당신이 심각하게 잘못된 일이있을 경우 오류가 재미도 있어요
루프에서 어떤 일이 일어나고, 그것을 결국 "너무 많은 오류를 말할 것입니다.
이제 카운트 중지 할거야. "
그것은 기본적으로 구문 분석해야하는 텍스트 출력입니다.
결국, 당신이 당신이 가지고있는 메모리 누수를 알려줍니다
유용한 얼마나 많은 블록이 될 수있는 이유
가에서 한 블록 unfreed이라면,이 찾을 수 일반적으로 쉽게
1000 블록 unfreed보다.
unfreed 1000 블록은 아마 당신이 자유롭게 없을 겁니다
적절거나 연결된 목록.
그는 valgrind있어.
>> 이제 우리는, 질문의 섹션을 가지고
어떤을 다운로드 할 필요가 없습니다.
당신이 내 이름을 클릭하고 공간에를 당겨 수 있습니다.
지금 당신은 나를 클릭하십시오.
금요일 수정 한 우리가 처음하고있는 스택 될 것입니다.
금요일 수정 2 대기열 수 및 개정 3은 단독으로 연결리스트 될 것입니다.
우리 스택로 시작.
여기 따르면, 스택, 가장 기본적인 중 하나입니다
컴퓨터 과학의 기본 데이터 구조.
매우 원형 예입니다
식당에서 쟁반의 스택.
당신이 스택에 도입 될 때마다 그것은 원래
사람이 말 것이다 "트레이 스택처럼 오."
당신은 쟁반을 쌓아.
그런 때 트레이를 끌어 이동
당겨진다 첫 번째 줄은 스택에 넣어 된 마지막 사람입니다.
그것은 또한 같은 스택은 여기라고
우리는 스택이라는 메모리의 세그먼트가 있습니다.
그리고 왜 스택이라고?
>> 때문에 스택 데이터 구조와 같은,
그것은 스택에 스택 프레임을 밀어더라도,
스택 프레임은 함수의 특정 호출과 같은 곳입니다.
그리고 스택처럼, 당신은 항상 반환해야합니다
함수 호출에서 다시 낮은 스택 프레임에 내려 오기 전에.
당신은 주요 통화 foo는 호출 바, 메인에 직접 바를 수익을 가질 수 없습니다.
그것은 항상 몰아 보여주고 올바른 스택을 따라 있어요.
두 작업은, 내가 말 한거처럼, 푸시와 팝 있습니다.
사람들은 보편적 인 용어입니다.
당신은 스택에 상관없이 어떤 측면에서 푸시와 팝을 알고 있어야합니다.
우리는 큐가 서로 다른 종류의 아르가 표시됩니다.
정말 보편적 인 용어를 필요는 없지만, 푸시 및 팝 스택에 대한 보편적입니다.
푸시는 단지 스택에 집어 넣습니다.
팝 스택을 벗고 있습니다.
그리고 우리는 우리의 typedef 구조체 스택을 가지고 여기를 클릭하십시오
그래서 우리는 숯불 ** 문자열을 갖추고 있습니다.
어떤 **가 무서워하지 마세요.
이 문자열의 배열로 끝나게 것입니다
문자에 대한 포인터 또는 배열 곳
문자에 대한 포인터는 문자열이어야하는 경향이 있습니다.
이 문자열이어야 할 필요는 없습니다,하지만 그들은 문자열이 될거야.
>> 우리는 문자열의 배열을 갖추고 있습니다.
우리는 스택에 현재 얼마나 많은 요소를 나타내는 크기를,이
그리고 우리는 스택에 얼마나 많은 요소가 될 수있는 능력을 갖추고 있습니다.
용량이 1보다 큰 무언가로 시작해야합니다
하지만 크기가 0으로 시작하려고합니다.
자, 당신이 스택 생각할 수 세 가지가 기본적으로 있습니다.
음, 아마 더 있지만, 주로 사용되는 두 가지 방법은
당신은 배열을 사용하여 구현할 수, 또는 당신은 연결리스트를 사용하여 구현할 수 있습니다.
링크 된 목록은 가지에서 스택을 할 사소한입니다.
그것은 연결된 목록을 사용하여 스택을 만드는 것은 매우 쉬운 일이다
그래서 여기, 우리는 배열을 사용하여 스택을 만들 거라고
그리고 배열을 사용하여, 당신이 생각할 수있는 두 가지 방법도 있습니다.
전에, 내가 말했을 때 우리는 스택의 용량을 가지고
그래서 우리는 스택에 요소를 이용하실 수 있습니다.
>> 무슨 일이 수있는 유일한 방법은 가능한 빨리 10 요소를 누르으로 다음 작업이 완료됩니다.
당신은 세계에서 10 가지의 행 위가 알고 있습니다
당신은 당신의 스택에 10 개 이상의 일을하지 않아도 될 것
이 경우 귀하의 스택의 크기에 행 위를 할 수 있습니다.
아니면, 당신의 스택이 경계해야 가질 수
당신이 배열을하고 있다면, 그건 매번는 10 요소를 누르 것을 의미합니다
이 20 요소를 쳤을 때 다음이 20 요소에 성장 할 것, 그리고하고
은 30 요소 40 요소로 배열을 성장 할거야.
당신은 우리가 여기서 할 수있는 일은 무엇 용량을 증가해야 할거야.
우리가 우리 스택의 최대 크기에 도달 매번
우리가 다른 뭔가를 밀어 때, 우리는 용량을 증가해야 할거야.
여기, 우리는 푸쉬 푸쉬 BOOL (숯불 * STR)로 선언했습니다.
숯불 *의 str을 우리가 스택에 밀어되는 문자열입니다
그리고 BOOL은 우리가 성공 또는 실패 여부를 말합니다.
>> 우리가 어떻게 실패 할 수 있습니까?
당신이 생각할 수있는 유일한 상황은 무엇입니까
우리는 FALSE를 반환해야합니다 어디에?
그래.
[학생]는 가득하고 우리가 접하고 구현을 사용하는 경우.
그래, 우리가 어떻게 정의 - 그는 그럴 답변
그것은 전체, 우리는 경계 구현을 사용하는 경우.
그럼 우리가 확실히 false를 반환합니다.
즉시 우리가 배열에 10 가지를 누르으로, 우리는 11 맞지 않을 수 있으며, 우리가 false를 반환하므로.
이 경계 경우 어떻게해야합니까? 그래.
당신은 어떤 이유로 배열을 확장 할 수 있습니다.
그래, 메모리, 제한된 자원이다
결국, 우리는 다시 이상 스택에 밀어 물건을 계속한다면,
우리는 맞게 큰 배열을 시도하고 할당 할거야
우리가 사용하고있는 큰 용량 및 malloc 또는 무슨 일이든 False를 반환 예정이다.
음, malloc는 null 반환합니다.
>> 기억, 당신은 malloc를 호출 매번, 당신은 확인 만해야하는 경우 그
null을 반환 또는 다른 그 정확성을 공제합니다.
우리는 경계가 스택을 갖고 싶어 때문에,
우리가하려고하는 경우 우리가 거​​짓 반환 할 수있는 유일한 경우는
용량 및 malloc을 늘리거나 false를 반환 뭐든간에.
그런 다음 팝업은 인수도도지지 않습니다
그리고 스택의 최상위 (top)에있는 문자열을 반환합니다.
어쨌든이 가장 최근에 스택에 밀어되었다가, 재 무엇 팝업입니다
그리고 또한 스택에서 제거합니다.
그리고 스택에 아무​​것도없는 경우가 null이 반환 확인합니다.
이 스택이 비어 있는지 항상 가능합니다.
자바에서, 당신이 그, 또는 다른 언어로 사용하는 경우,
빈 스택에서 튀어하는 것은 예외이나 뭐 발생할 수 있습니다.
>> 그러나 C에서 null은 우리가 이러한 문제를 처리하는 방법에 많은 사건 종류의 것입니다.
null을 반환하면 우리는 스택이 비어 있다는 의미 할거야 방법입니다.
우리는 귀하의 스택의 기능을 테스트 할 코드를 제공
푸시와 팝을 구현합니다.
이 코드의 많은 수 없습니다.
그러 - 사실은, 우리가하기 전에, 힌트, 힌트 -
당신이 그것을 본적이 없다면, malloc이 유일한 함수가 아닙니다
그 말은 당신의 힙에 메모리를 할당합니다.
alloc 함수의 가족이 있습니다.
첫 번째는 당신이 익숙 malloc입니다.
그런 다음 malloc과 같은 일을 calloc은이
하지만 당신 모든것을 제로합니다.
혹시 무언가를 mallocing 후 null로 모든 설정하려고 한 경우
당신은 대신 쓰기의 처음에 calloc을 사용했는데
메모리의 전체 블록을 0으로 루프.
>> Realloc는 malloc처럼하고 특별한 경우를 많이 있습니다
하지만 기본적으로 realloc은 무엇을입니다
이미 할당 된 포인터를 걸립니다.
Realloc 당신이 여기에 관심을 지불 할 원하는 함수입니다.
이미 malloc에​​서 반환 된 포인터를 걸립니다.
자, 당신이 malloc에​​서 10 바이트 포인터를 요청 말한다.
그런 다음 나중에, 당신이 20 바이트를 원 실현
그래서 당신은, 20 바이트 가진 포인터에 realloc를 호출
그리고 realloc는 자동으로 모든 걸 복사합니다.
당신은 내가 10 바이트의 블록을 가지고있는 것처럼, 다시 malloc을했다. 경우
지금은 20 바이트의 블록을 필요
그래서 malloc 20 바이트를하는 경우, 그럼 수동으로 먼저에서 10 바이트를 넘는 복사해야
먼저 두 번째로 후 무료로 제공됩니다.
Realloc는 그 부분을 처리합니다.
>> 서명이 무효의 * 될 것입니다 공지 사항
이는 단지 메모리 블록에 대한 포인터를 제공하고 있습니다
그리고 무효 * PTR.
당신은 일반 포인터로 공극 * 생각할 수 있습니다.
일반적으로, 당신은 무효 *로 처리 안
하지만 malloc은 무효 *를 반환되어 다음 단처럼 사용할 있어요
이 사실 숯불 *가 될 것입니다.
malloc에​​ 의해 반환 된 이전 공극 *
지금은 크기 그리고 realloc에​​ 전달 될 예정,되고
당신은 할당 할 바이트의 새로운 수 있으므로 새로운 능력입니다.
내가 몇 분만 시간을 줘, 우리의 공간에서 할 수 있습니다.
금요일 수정 1 시작합니다.
나는, 푸시를 구현하기에 충분한 시간 후에 희망을 중단됩니다
그럼 내가 당신에게 팝업을 다른 휴식을 제공합니다.
그러나 정말 전혀 그렇게 많은 코드가 없습니다.
대부분의 코드는 용량을 확장, 아마도 확장 것들입니다.
좋아요, 완전히 수행 할 수는 없으며 압력,
하지만, 오래은 옳은 길을 가고있는 것처럼 기분으로 좋네요.
>> 사람은 날 끌어 올릴 수있는 편안 코드를 가지고 있습니까?
네, 그럴 게요,하지만 누구에게도 내가 살펴볼 수있는 코드가 무엇입니까?
좋아, 그게 뭐든지간에, 그것을 저장 시작할 수 있습니다?
항상 그 단계를 잊어 버려.
그래, 푸시를보고,
당신은 코드를 설명 하시겠습니까?
[학생] 우선, 제가 크기를 증가했다.
그러니까 아마 그 - 어쨌든이 될 것 같은데, 난의 크기를 증가
이 용량 미만이라면 나는 참조하십시오.
그리고 용량보다면, 난 우리가 이미 가지고있는 배열에 추가합니다.
사실이 아니라면, 내가, 2로 용량을 곱
그리고 지금은 더 큰 용량 크기 뭔가를 문자열 배열을 할당.
거기서 실패하면 그리고 난은 사용자에게 있으며, FALSE를 반환
괜찮아요되면, 나는 새로운 장소에 문자열을 넣어.
>> [롭 B.]는 우리가 좋은 비트 연산자를 사용한 또한을 발견
2로 곱합니다.
단, 왼쪽 시프트는 항상 둘을 곱한 할 예정이다.
당신이 그걸 기억으로 오른쪽 이동은 오랫동안 2로 나누어 져 있습니다
2로 나누어 정수에서와 같이 2로 나눕니다.
그것은 여기 저기 1 잘릴 수 있습니다.
그러나 1 왼쪽 시프트는 항상 2을 곱한 할 것입니다
당신이 오버 플로우 정수의 범위를하지 않는 한, 다음이되지 않습니다.
사이드 댓글 달기를 수행 할 수 있습니다.
내가 뭘 -이 어떠한 방법을 코딩가 호전되지는 할
하지만 이런 짓을 것을 좋아합니다.
그것은 실제로 약간 이상 할 것이다.
어쩌면이이 문제를 보여 완벽한 아닙니다
하지만의 -이 블록으로 세그먼트에 좋아
이런 경우 괜찮다면, 그럼 내가 뭔가를 할거야
다음 기능을 수행합니다.
나는 그 함수를 아래로 내 눈을 모든 방법을 스크롤 할 필요가 없습니다
다른 한 이후에 발생하는 볼 수 있습니다.
이러한 상황이 발생할 경우 경우가있어, 그 다음엔 그냥 반환합니다.
또한이 이외의 모든 좋은 장점이 있습니다
지금 한 번 왼쪽으로 이동합니다.
난 더 이상, 간 경우 지금까지 터무니 긴 라인 근처 필요가 없습니다
다음, 그 4 바이트 도움이 수 있으며, 또한 더 많은 왼쪽 뭔가가
덜 - 그래, 내가 기억해야하는 경우 기분이 압도
나는 루프의 다른 내부의 안쪽에 잠시 루프에서 현재입니다.
아무 데나 당신은 내가 가지 같은, 당장 수익을 수행 할 수 있습니다.
그것은 완전히 선택 사항이며 어떠한 방식으로 예상.
>> [학생]가이 크기이어야합니다 - 페일 조건에?
여기에 실패 조건은 우리가 지금 네, realloc에​​ 실패합니다.
추측 컨데, 실패 조건에서 어떻게 발견
우리 무료 콘텐츠 나중에하지 않는 한, 우리는 항상 실패 할 것
우리가 뭔가를 밀어하려고 몇 번을 찍었는지는 상관 없습니다.
우린 계속 밀고 나아가 야하는 경우, 우리는 증가 크기를 유지
우리는 스택에 아무​​것도 넣어되지 않더라도.
보통은 될 때까지의 크기를 증가하지 않습니다
우리는 성공적으로 스택에 넣어 한 후.
우리는 하나 여기, 여기, 말을 할 것입니다.
대신 ≤ 용량을 s.size의 뜻을 그리고, 그것은 용량보다 덜
모든 곳을 우리가 이동하기 때문에.
>> 그리고 기억, 우리는 가능한 허위 유일한 장소를 반환 수
realloc이 null 반환 곳, 여기에
당신은 표준 오류를 기억 발생할 경우,
당신은 표준 오류를 인쇄하려는 아마이 사건을 고려해 볼 수 있습니다
대신 표준 출력에 직접 인쇄가 너무 fprintf STDERR.
다시 말하지만, 그건 기대하지 않지만 그것을 오류가 있다면
printf 입력 한 다음 당신은 대신 표준에서의 표준 오류에 인쇄 할 수도 있습니다.
>> 누구든지주의 다른 게 있나요? 예.
[학생] 당신은 [안 들리게]에 가서 할 수 있나요?
[롭 B. 네, 실제 그것의 binariness 또는 뭐지?
[학생] 그래서 당신은 두하여 곱?
[롭 B.] 네, 기본적으로.
진 땅에서, 우리는 항상 숫자 우리의 세트가 있습니다.
오른쪽에있는 여기를 기본적으로 삽입을 1이 왼쪽을 이동.
돌아하려면 이진의 모든 것들이 기억
2의 힘이기 때문에이 0 2를 나타냅니다
1이 2이 2 2.
이제 오른쪽에 0을 삽입하여, 우리는 모든 이상 이동.
어떤 0-2으로 사용하면 2, 지금 2 1-2이다.
우리가 삽입 한 오른쪽
반드시 0 될 것입니다 것은
하는 말이 있습니다.
지금까지 2로 번호를 곱하면 이상한 결국 않을거야
그래서 0 장소에 2, 0이어야합니다
당신이 바꿔 발생 경우이 내가 절반 전에 대한 경고가 무엇
정수의 비트 수없는,
다음이 1에서 살게 될 것입니다.
당신이 정말로 큰 용량을 처리 할 일이 있으면 그 유일한 걱정입니다.
그러나 그 시점에서, 다음, 다 수십억의 배열을 상대
어쨌든 메모리에 맞지 않을 수있는.
>> 이제 우리는 더욱 쉽게 팝,로 이동할 수 있습니다.
당신은 전체 무리를 나타에 있다면 당신은 그것을 좋아 할 수
지금 다시 이분의 일 용량에있다.
당신은 당신이 가진 메모리의 양을 축소하기 위해 realloc 수
하지만 그런 걱정은 할 필요가 없습니다, 그래서 유일한 realloc 케이스가 될 것입니다
메모리를 축소 적이 메모리를 증가
이는 팝업 슈퍼 쉽게 만들어 줄 수 있습니다.
스택처럼 될거야 지금 큐,
하지만 당신이 일을 수행하는 순서가 반대로되어 있습니다.
큐의 원형 예제는 줄입니다
그래서 난 당신이 영어라면했는데 이렇게 말했을 것이다
대기열의 원형 예는 큐입니다.
그래서 라인과 같은, 당신은 라인의 첫 번째 사람이라면,
당신은 선을 첫 번째 사람이되고 기대합니다.
이 라인의 마지막 사람 인 경우 서비스를 마지막으로 본 사람이 될거야.
스택은 LIFO 패턴이었다 반면 우리는 그 FIFO 패턴을 전화하십시오.
그 단어는 매우 보편적이다.
>> 스택과 같은과 배열과는 달리, 큐는 일반적으로 중간에 요소에 대한 액세스를 허용하지 않습니다.
여기서, 스택, 우리는 푸시와 팝을 갖추고 있습니다.
여기, 우리는 그들에게 인큐와 dequeue를 불러 했죠.
나는 또한 그들에게 변화와 unshift라고 들어 보신 적이있을 것입니다.
나는 사람들이 푸시와 팝 큐로도 적용 할 말을 들었습니다.
내 말은, 제거, 삽입 들었습니다
그래서 밀어 당신이 스택에 대해 얘기하는 경우, 당신은 밀 진열하게하고 있습니다, 아빠.
이 큐에 대해 얘기하고 있다면, 당신은 사용하고자하는 단어를 선택 할 수
삽입 및 제거하고 호출해야하는지에 대해서는 합의가 없습니다.
하지만 여기, 우리는 인큐와 dequeue 있습니다.
이제 구조체는 스택 구조체 거의 동일 보입니다.
그러나 우리는 머리를 추적해야합니다.
나는 여기라고 생각하지만, 우리가 왜 머리를해야하나요?
프로토 타입은 푸시와 팝을 기본적으로 동일합니다.
당신은 푸시와 팝으로 생각할 수 있습니다.
유일한 차이점은 팝업 것은 재 - 대신 마지막으로, 처음을 반환 해.
2, 1, 3, 4, 또는 무언가.
여기가 시작이야.
우리 대기열이 완전히 꽉 차 있기 때문에 거기에 4 개 요소가 있습니다.
우리 큐의 끝이 현재 2
지금 우리는 다른 뭔가를 삽입로 이동합니다.
>> 우리는 스택 버전에 우리가 무슨 짓을했는지 다른 뭔가를 삽입 할 때
우리는 메모리의 블록을 확장하고 있습니다.
이것에 대한 문제는 무엇입니까?
[학생] 당신은 2 이동합니다.
나는 큐의 마지막에 대해 이전에 말씀하신 거,
이 1에서 우리가 시작할 때 이해가되지 않는
그런 다음에 우리가 다음엔 dequeue 3, dequeue 4,, dequeue 1 원
다음 dequeue 2, 다음이 하나를 dequeue.
우리는 지금 realloc을 사용할 수 없습니다
아님 최소한, 당신은 다른 방법으로 realloc을 사용해야합니다.
하지만 당신은 아마 realloc을 사용해서는 안됩니다.
당신은 수동으로 메모리를 복사 할 것입니다.
>> 메모리를 복사 할 두 가지 기능이 있습니다.
memcopy와 memmove이 있어요.
나는 현재 사용하려는거야 어떤 볼 사람이 페이지를 읽고 있어요.
좋아요, memcopy, 그 차이는
memcopy와 memmove, 하나는 제대로 사건을 처리하는
당신은이 지역을 겹쳐 발생 영역으로 복사하는 곳
당신은에서 복사하고 있습니다.
Memcopy가 처리하지 않습니다. Memmove는 않습니다.
당신은 - 문제 생각할 수
우선은,이​​ 사람을 복사 할 말
이 남자는 이러한 넷.
결국, 배열은 어떻게 생겼해야합니다
복사는 2, 1, 2, 1, 3, 4, 끝에 일 후.
그러나 우리가 실제로 복사되는 순서에 따라 달라집니다
우리 지역은 우리가에 복사하고있는 사실을 고려하지 않은 경우 이후
중복 우리가에서 복사하고있는 하나
그리고 우리는 여기 시작처럼 할 우리가 가고 싶은 곳으로 2 복사 할 수 있습니다
그리고 앞으로 우리 포인터를 이동합니다.
>> 이제 우리는 여기와 여기에있을거야, 이제 우리는 복사 할
이이 녀석 이상의 남자와 앞으로 우리 포인터를 이동합니다.
우리가 치울거야하면, 1, 2, 1, 2, 1 2
대신 적절한 2, 1, 2, 1, 3, 4 때문에
2, 1은 원래 3, 4을 변형.
Memmove은 정확하게 처리합니다.
이 경우, 기본적으로 항상 memmove를 사용하여
그것은 올바르게 처리 때문입니다.
그것은 일반적으로 더 악화을 수행하지 않습니다.
이 아이디어는 대신 처음부터 시작하고 이런 식으로 복사입니다
우리가 여기처럼, 그것은 끝에서 시작에 복사
그 경우, 당신은 문제가 없다.
더 성능이 손실되지 않습니다.
항상 memmove를 사용합니다. memcopy 걱정하지 마십시오.
당신이 별도로 memmove 할거야 그리고 그것이
대기열의 포장 종합 부분입니다.
걱정이 완전히 수행하지 경우 없습니다.
이 스택, 푸시, 팝보다 더 어렵습니다.
>> 누구든지 우리가 함께 일 수있는 코드가 있습니까?
도 완전히 불완전한 경우?
[학생] 그래,하지만 완전히 불완전입니다.
우리가 - 수의 버전을 저장으로 완전히 불완전한은 오래로 괜찮을까요?
나는 매번 잊어 버려요.
우리가 물건을 크기를 조정해야 할 때 좋아요, 무엇을 무시하면 발생합니다.
완전히 크기를 무시합니다.
이 코드를 설명합니다.
크기가 모든 처음 사본보다 작다면 내가 먼저 모든 알아보고 있어요
그리고 그 후, 나는 삽입 - 난 머리 + 크기를 가져
그리고, 그것은 배열의 용량을 주위에 래핑해야합니다
그리고 난 그 위치에서 새로운 문자열을 삽입합니다.
그럼 내가 크기를 증가시키고 TRUE를 반환.
>> [롭 B.]이 분명히 당신이 모드를 사용하려는 것 이러한 경우 중 하나입니다.
당신이 근처에 배치 생각한다면, 주변에 감기가있는 경우 모든 종류의
바로 생각 MOD해야합니다.
빠른 최적화로 / 코드 한 줄이 짧은하기
당신은 선이 바로 이것에 따라 것을 알
단지 크기 + +하므로 병합이이 줄에, 크기 + +.
여기 이제, 우리는 가방을 가지고
어디에서 우리는 충분한 메모리가 없습니다
그래서 우리는 2 일까지 용량을 증가하고 있습니다.
, 난 당신이 여기 같은 문제가 될 것 같은데,하지만 지금 무시할 수
귀하의 용량을 증가하는 데 실패 곳 경우,
그런 다음 다시 두하여 용량을 감소하려는거야.
또 다른 짧은 메모 니가 할 수있는 일 뿐이에요 + =,
여러분은 << = 작업을 수행 할 수 있습니다.
동일하기 전에 거의 무엇이든 갈 수, + =, | =, & =, << =.
숯불 * 새로운 메모리의 새로운 블록입니다.
아, 여기여.
>> 사람들은 메모리의 새로운 블록의 종류에 대해 어떻게 생각하십니까?
[학생]은 숯불 **해야합니다.
여기까지 우리 구조체로 생각,
문자열은 우리가 재분배는 것이 야.
우리는 큐에 요소에 대한 완전히 새로운 동적 스토리지를하고 있습니다.
우리는 문자열로 지정 될 것 것은 우리가 지금 mallocing있는거야
그래서 새로운 숯불 **가 될 것입니다.
그것은 문자열의 배열거야.
그럼 우리가 False를 반환 할거야하는 아래의 경우는 무엇인가?
[학생] 우리는 숯불 * 일을해야 하는가?
[롭 B.] 네, 좋은 전화.
[학생] 무슨 일이야?
[롭 B.] 우리는이 더 없기 때문에 숯불 *의 크기를하고 싶었 이상 -
sizeof (문자)가 1 일하기 때문에 실제로는 매우 큰 문제가 될 것입니다.
Sizeof 문자 *는 4가 될 것입니다
그래서 당신은 ints 상대가 시대의 많은,
여러분이 가지고 도망가지기 때문 INT *의 INT와 크기의 크기
32 비트 시스템에서 같은 일이 될거야.
하지만 여기, sizeof (숯불)와 sizeof는 (숯불 *) 지금 같은 일이 될거야.
>> 우리가 False를 반환 상황은 무엇입니까?
[학생] 새가 null입니다.
새로운 null이면 네,, 우리는 False를 반환
그리고 내가 내려 간다 여기
[학생] [안 들리게]
[롭 B. 그래,이 유효합니다.
당신도 2 배 용량이나 용량 변화 한 후 만 여기이든 뭐든간에 내려 설정을 할 수 있습니다.
우리가 그렇게 우리는 할 수 있습니다.
용량 >> = 1.
그리고 당신은 1의 자리를 잃어 버릴까 걱정해야 할 수 없어
당신은 1 이동 떠난 것 때문에, 그래서 1의 장소는 반드시 0
그래서 지금 1 변화, 계속 잘 될거야.
[학생]는 당신이 반환하기 전에 해당 작업을 수행 할 필요가 있습니까?
[롭 B. 네,이 전혀 의미가 없습니다.
>> 우리가 끝으로 진정한 재 끝낼거야 지금 가정합니다.
우리가이 memmoves을 다하겠습니다 방법
우리는 우리가 그들을 어떻게주의해야한다.
사람이 우리가 그들을 어떻게에 대한 제안 사항이 있습니까?
다음은 시작입니다.
필연적으로, 우리는 다시 처음부터 시작하려면
거기서부터와 복사 일, 1, 3, 4, 2.
당신이 어떻게해야합니까?
첫째, 다시 memmove에 대한 man 페이지를보고 있습니다.
Memmove, 인수의 순서는 항상 중요합니다.
우리는 소스 두 번째 크기 셋째, 먼저 목적지 싶습니다.
원본 및 대상을 취소 기능이 많이 있습니다.
대상, 소스는 다소 일치하는 경향이있다.
이동, 왜 반환입니까?
당신이 할 수있는 어떤 이유로 목적지에 대한 포인터를 반환합니다.
난 읽을 수 사진,하지만 우리는 우리의 목적지로 이동하고 싶습니다.
>> 우리의 목적지를 어떻게 할거야?
[학생] 새.
[롭 B.] 그래, 우린 어디로에서 복사거야?
우리가 복사하는 첫 번째 일은이 1, 3, 4입니다.
, 4 3 -이 1 무엇입니까.
이 1의 주소는 무엇입니까?
그 1의 주소는 무엇입니까?
[학생] [안 들리게]
[롭 B.] 헤드 + 첫 번째 요소의 주소를 입력합니다.
우리가 어떻게 배열의 첫 번째 요소를 어떻게해야합니까?
[학생] 큐.
[롭 B. 네, q.strings.
단, 여기, 우리의 머리는 1입니다.
제길. 난 그냥 생각 마법 -
여기, 우리의 머리는 1입니다. 나도 내 색을 변경하는거야.
여기 문자열입니다.
우리가 여기에했던 것처럼이, 우리는 둘 다 쓸 수 있습니다
로 헤드 + q.strings.
많은 사람들이 또한 그것을 작성 및 q.strings [머리].
이건 정말 덜 효율적이지 않습니다.
당신이 그것을 dereferencing 후의 주소를지고대로, 생각 수 있습니다
하지만 컴파일러는 q.strings가 + 머리, 어쨌든 우리가 전에했던 일에 번역 예정이다.
당신이 생각하고 싶지 어느 방법입니다.
>> 그리고 얼마나 많은 바이트 우리가 복사 하시겠습니까?
[학생] 용량 - 머리.
용량 - 머리.
그리고 당신은 항상 예를​​ 작성할 수
그 말이 맞다면 알아낼 수 있습니다.
[학생]이 다음 2로 나누어해야합니다.
그래, 난 우리가 크기를 사용할 수 있습니다 같아요.
우리는 여전히 크기가되는 -
크기를 사용하여, 우리는 4 같은 크기만큼의 공간을 확보한다.
우리 크기는 4입니다. 우리의 머리는 1입니다.
우리는이 3 요소를 복사하고 싶습니다.
그것은 정신이 크기를 확인이야 - 머리는 제대로 3.
우리가 전에 말 한거처럼,, 여기로 올
우리가 능력을 사용하는 경우, 우리는 2로 나누어해야 할
우리는 이미 용량을 성장했기 때문에 대신에, 우리는 크기를 사용하려고하고 있습니다.
그 사본 부분.
이제, 우리는 다른 부분, 시작의 왼쪽 된 부분을 복사해야합니다.
>> 그게 무슨 위치로 memmove하는거야?
[학생]는 플러스 크기 - 머리.
네, 그래서 우리는 이미 크기로 복사 한 - 헤드 바이트를,
그래서 우리는 나머지 바이트를 복사 할 것은 새로운
그리고 크기는 마이너스 - 음, 바이트 수는 이미 인치 복사
그리고 우리가 어디에에서 복사거야?
[학생] Q.strings [0].
[롭 B. 네, q.strings.
우리는 하나를 수행 & q.strings [0]. 수
이렇게하면이보다 훨씬 적은 것이 일반적입니다.
그냥 0 거에요 경우에는 q.strings을 볼 경향이 있습니다.
우리가에서 복사하는 곳이야.
우리는 복사 얼마나 많은 바이트를 떠난합니까? >> [학생] 10.
맞아.
[학생] 우리가 5를 곱해야합니까 - 10 배 바이트 나 뭐의 크기?
그래,이 곳 정확하게 우리가 복사하는 것입니다?
[학생] [안 들리게]
우리가 복사하는 것은의 유형은 무엇입니까?
[학생] [안 들리게]
그들이 어디서 오는 네, 숯불 *의 우리가 복사하는 있도록, 우리는 몰라요.
뭐, 가리키는 곳, 문자열처럼, 우리는 대기열에 그것을 밀어 결국
또는 대기열에 enqueuing.
그 어디 출신, 우리는 아무 생각이 없습니다.
우리는 숯불 *의 자신을 추적해야합니다.
머리 바이트 - 우리가 크기를 복사 싶지 않아요.
머리 숯 * S, - 우리가 크기를 복사 할
그래서 우리는 sizeof (숯불에 *)하여이 문제를 곱거야.
동일 앉아서 머리 * sizeof (숯불 *).
>> [학생] 무엇에 대한 [안 들리게]?
여기 맞죠?
[학생] 아니, 그건 아래의 크기 - 머리.
[롭 B.] 여기 요?
포인터 산술.
포인터 산술 돌아가는 일에 어떻게 건
가 자동으로 우리 상대가있는 유형의 크기에 따라 만연하고 있습니다.
그냥, 여기에 같은 새로운 + (크기 - 머리)
& 새 [- 머리 크기]를 정확히 동일합니다
우리가 그렇게가 올바르게 작동 것으로 예상 될 때까지
우리는 정수 배열을 상대하는 경우 때문에, 우리는이 정수 색인을하지
로 또는 5의 크기지만, 넌 4 요소를 원할 경우, 우리는 색인
INT 배열 [4].
당신이 ... - [4] INT의 * 크기입니다.
그래서이 경우에게 자동으로 처리하고,
그대로 동​​일합니다, 그래서 브래킷 구문
단지 최대한 빨리 컴파일로 변환 할 것이다.
그게 당신이주의 할 필요가 뭔가
당신은 크기를 추가하는 - 머리
당신은 1 바이트가 아닌 추가됩니다.
한 바이트 또는 무엇이든 다 될 수있는 한 문자 *를 추가하고 있습니다.
>> 다른 질문?
좋아요, dequeue 쉽게 될 것입니다.
내가 구현하는 분을 제공합니다.
아, 이런 일이 같은 상황 이네요 곳
무엇 인큐 경우, 우리는 null을 enqueuing하는 경우,
어쩌면 우리가 그것을 처리 할, 우리가하지 않습니다.
우리는 여기서 다시는 이런 짓을하지만, 우리 스택 경우와 동일하지 않습니다.
우리가 널 (null)을 인큐 경우, 우리는 그것을 무시 할 수 있습니다.
누구나 내가 끌어 수있는 몇 가지 코드가 있습니까?
[학생] 난 그냥 dequeue 있습니다.
버전 2는 - 괜찮습니다.
당신은 설명하고 싶어?
[학생] 먼저 큐에 뭔가가 있는지 확인
그리고 크기는 1 하강.
당신은 작업을 수행 할 필요가 그리고 당신은 머리를 돌려
그리고 한 백업 머리를 이동합니다.
좋아, 그럼 우리가 고려해야 할 코너 경우가 있습니다. 그래.
[학생] 머리가 마지막 요소에있는 경우
다음은 헤드가 배열의 외부 가리 싶지 않아요.
>> 그래, 가능한 한 빨리 머리로, 우리의 배열의 끝을 도달
우리가 dequeue 때, 우리의 머리는 다시 0으로 modded해야합니다.
불행하게도, 우리는 한 단계에서 해당 작업을 수행 할 수 없습니다.
나는 아마도이 해결 할 방법을 생각
이 우리가 돌​​려 무엇 숯불 *가 될거야
당신의 변수 이름은되고 싶어 뭐든간에.
그런 다음 우리는 우리의 능력으로 머리를 MOD하려면
그리고 RET 반환합니다.
여기에 많은 사람들이 그들이 무엇을 - 할 수 있습니다
이 - 올의 경우 것은 사람들이 볼 수있는 경우 머리
용량보다 큰, 머리를 해 - 용량을.
그리고는 모드가 무엇인지 주변에 일.
머리 모드 = 용량은 훨씬 청소기입니다
용량 -. 주변 용량의 머리보다 머리 큰 경우보다 포장의
>> 질문이 있으십니까?
자, 우리가 남아있는 마지막 일은 우리의 링크 목록입니다.
당신이 한 경우는 연결리스트 문제의 일부에 사용 될 수 있습니다
당신은 해시 테이블을 한 경우 귀하의 해시 테이블에 목록을 연결.
난 강력하게 해시 테이블을하는 것이 좋습니다.
당신은 이미, trie을했을 거에요
하지만 시도는 더 어렵습니다.
이론적으로, 그들은 점근 더 잘해.
하지만, 진정, 전광판을보고
더 나은하지 않을 시도, 그들은 더 많은 메모리를 차지합니다.
모든 것들이에 더 일을 악화되고 종료하려고합니다.
그것은 데이비드 Malan의 솔루션이 항상있는 거구나
그는 항상 게시물 자신의 trie 솔루션을하며, 그 현재 위치를 보자.
그는 데이비드 J, 아래 무엇입니까?
그는 제 18 야, 그건 정말 나쁘지 않아요 때문에
그리고 가장 중 하나를 할 거에요하면 생각할 수 시도
또는 가장 중 하나가 trie의 시도합니다.
그건 그의 원래의 솔루션도하지 않아?
trie 솔루션은 RAM 사용의 범위에서 더 많은 경향이 같아.
>> 상단으로 이동 RAM 사용이 하나의 자리에 있습니다.
하단으로 내려 가서, 그 다음에 당신이 시도 표시되기 시작
당신은 절대적으로 대규모 RAM 사용량을 어디
와 시도가 더 어렵습니다.
하지 완전히하지만 교육 경험의 가치 하나를 택한다면.
마지막으로, 우리의 연결된 목록입니다
이러한 세 가지, 스택, 큐, 그리고 링크 된 목록,
지금까지 컴퓨터 과학에서 수행하는 미래의 일이
당신이 것들로 익숙를 가정 한 것입니다.
그들은 모든 걸 그냥 기본입니다.
>> 목록을 연결하고, 여기에 우리는 단독으로 연결된 목록은 우리가 구현 될 것입니다하고 있습니다.
단독으로 무엇을 연결 않기 때문에 이중 연결에 반대하는 말인가요? 예.
[학생] 단지 다음 포인터가 아니라 포인터를 가리키는
그와 후 하나를 이전 한처럼.
그래, 사진 형식으로, 난 그냥 무슨 짓을 한거야?
나는 두 가지가 있습니다. 나는 그림과 사진이 있습니다.
그림 형식으로, 우리의 단독 링크 목록,
필연적으로, 우리는 우리의 목록의 머리에 포인터 어떤 종류의이
다음 목록에서, 우리는 그냥 포인터를 가지고
그리고 어쩌면이 점은 null입니다.
이 단독으로 연결된 목록의 전형적인 그림거야.
이중 연결리스트, 당신은 뒤로 이동할 수 있습니다.
당신에게 목록의 노드를 제공한다면, 반드시 갈 수
다른 노드 목록에서이 이중 연결리스트 인 경우.
하지만 당신에게 목록에서 세 번째 노드를하고 단독으로 연결리스트 있다면,
지금까지 첫 번째와 두 번째 노드에있을 겁니다. 방법 없습니다
그리고 장점과 detriments, 그리고 확실한 사람도
더 많은 크기를 차지, 당신은 이런 일이 지금 가리키고있는 곳을 추적해야합니다.
그러나 우리는 약 단독으로 연결되어 신경.
>> 우리가 구현해야 할 것 몇 가지.
귀하의 typedef 구조체 노드, INT I : 구조체 노드 * 다음, 노드.
그 typedef는 마음에 타오른해야합니다.
퀴즈 1, 연결리스트 노드의 typedef를 제공 좋아한다
당신은 즉시 내려 끄적 할 수 있어야한다
생각도.
난 몇 질문을 추측, 왜 우리가 여기 구조체해야하나요?
왜 우리가 노드 * 말을 못 들어?
[학생] [안 들리게]
그래.
일로 노드를 정의 유일한
자체 typedef입니다.
하지만,이 시점의, 우리가이 구조체 노드 정의를 통해 분석의 종류가되면,
우리는 typedef가 완료되지 않았습니다 때문에 때문에 아직 우리의 typedef을 완료하지 않은
노드가 존재하지 않습니다.
그러나 구조체 노드는 않습니다,이 노드 여기에,
이 또한 무엇이라고 할 수있다.
이것은 N 호출 할 수 있습니다.
이 연결리스트 노드라고 할 수있다.
그것은 아무 것도 호출 할 수 있습니다.
그러나이 구조체 노드는이 구조체 노드와 같은 일을 호출해야합니다.
이 또한 여기에 있습니다 전화 뭐,
그리고 그렇게 또한 질문의 두 번째 지점을 답
- 그래서 당신은 structs와 structs의 typedefs를 볼 시간이 많이되는데,이입니다
방금 typedef 구조체를 볼 수 있습니다 어디에, 익명 structs를 볼 수 있습니다
구조체, 사전, 또는 어떤의 구현입니다.
>> 왜 여기 우리는 노드라고해야하나요?
왜 익명 구조체가 될 수없는 이유는 무엇입니까?
거의 같은 대답입니다.
[학생] 당신은 구조체 내에 참조해야합니다.
네, 구조체 내에서 구조체 자체를 참조해야합니다.
이 구조체 이름을 지정하지 않으면이 익명 구조체 있다면, 당신은 그것을 참조 할 수 없습니다.
그리고 마지막하지만 적어도 -이 모든이어야 다소 간단하지,
이을 작성하는 경우 그리고 당신이 생각하는 도움이 될 것입니다
일 이러한 종류의 말이하지 않으면 당신은 뭔가 잘못하고 있다는.
마지막으로, 왜이 구조체 노드 * 있어야합니까?
왜 바로 옆에 노드를 구조체 할 수없는 이유는 무엇입니까?
다음 구조체를 [학생]는 포인터.
우리가 원하는 필연적입니다.
왜 다음 구조체 노드 수 없다?
왜 * 다음 구조체 노드 수있는 거지? 그래.
[학생] 그것은 무한 루프 같아요.
그래.
[학생]은 모든 하나가 될 것입니다.
네, 우리가의 크기 나 일을 할 방법을 생각합니다.
구조체의 크기는 기본적으로이 + 또는 - 여기 저기 몇 가지 패턴.
그것은 기본적으로 구조체에있는 물건의 크기의 합거야.
이게 바로 아무 것도 변경하지 않고, 크기는 쉽게 될 것입니다.
구조체 노드의 크기는 다음의 전 + 크기의 크기가 될 것입니다.
난의 크기는 4가 될 것입니다. 다음의 크기는 4가 될 것입니다.
구조체 노드의 크기는 8 될 것입니다.
우리가 *되어 있지 않은 경우, sizeof 생각
그리고 sizeof는 (i) 4가 될 것입니다.
구조체 노드의 크기 다음 다음 구조체 노드의 + 크기 난의 크기가 될거야
다음 구조체 노드의 I + 크기 + 크기입니다.
이 노드의 무한 재귀 것입니다.
이 일들이 있어야하는 방법입니다 이유입니다.
>> 다시 말하지만, 확실히, 그를 기억
적어도 당신이 할 수 할 수있는 충분한 이해
그 모양은 무엇을 통해 이유입니다.
우리가 구현하려는 것 것들.
만약 길이 목록 -
당신은 속임수와 주변을 유지할 수
글로벌 길이 나 뭐하지만, 그렇게는하지 않을거야.
우리는 목록의 길이를 계산거야.
우리는 포함 된 한 그는 기본적으로 검색처럼 있으므로
그래서 우리는이 정수 링크 된 목록에 있는지 확인하기 위해 정수의 연결리스트가 있습니다.
앞에이 목록의 시작 부분에 삽입 예정이다.
추가는 끝 부분에 삽입하는 것이다.
Insert_sorted는 목록에서 정렬 위치에 삽입 예정이다.
의 Insert_sorted 종류는 앞에 사용하거나 나쁜 방법으로 추가 적이 있다고 가정합니다.
>> 당신이 구현 때 insert_sorted - Insert_sorted
우선은 우리의 연결리스트가 있다고 가정 해 봅시다.
이 기능은 현재 5, 4, 2, 모습입니다.
내가 너무 오래 목록 자체가 이미 정렬되기 때문에, 3을 삽입 할
그것은 3가 있어야 할 곳 쉽게 찾을 수 있습니다.
I 2부터 시작합니다.
그래, 3은 2보다 큰, 그래서 제가 계속하고 싶습니다.
아, 4 너무 커서, 그래서 3 2과 4 사이에 갈 걸 알아
그리고 포인터와 모든 걸 해결해야합니다.
하지만 우리는 엄격히 insert_sorted 사용하지 않은 경우
좋아 그러니, 내가 6 앞에 말
그리고 내 연결 목록이 될 것이다.
이제 insert_sorted를 들어, 당신이 방금 가정 수 있도록, 말이 안
작업이 존재하더라도 목록이 정렬되어
이는이 정렬되지 않을 수 있으며, 바로 그 거에요.
그가 구현해야 할거야 주 것들 도움이 삽입 소를 찾아보십시오.
>> 지금 들어, 길이를 할 분을 가지고이 포함되어
저들은 비교적 빨리해야합니다.
종료 시간을 얼마 남지 않으므로 누구든지 길이에 대한 건이나 포함되어 있습니다?
그들은 거의 동일거야.
[학생] 길이.
, 어디 한번 수정하자.
좋아요.
당신은 설명하고 싶어?
[학생] 난 그냥 포인터 노드를 생성하고 글로벌 변수 먼저,에 초기화,
그리고 나는 감금 잘못을하고 그 경우 경우 0을 반환하지 않도록이 null이 있는지 확인하십시오.
그렇지 않으면,을 통해 루프, 정수 내에서의 트랙을 유지
나는 목록의 다음 요소에 액세스 한 횟수
와 같은 증가 작업 또한 그 실제 요소에 액세스
그럼 내가 계속,이 null이 있는지 확인 볼 수 있도록
가 널 (null)입니다되면, 그것은 중단하고 내가 액세스 한 요소의 개수를 반환합니다.
>> [롭 B.] 누구에 어떤 의견을 가지고 있습니까?
이 훌륭한 정확성의 바램 보입니다.
[학생] 당신이 노드 == null이 필요하다고 생각하지 않습니다.
그래, 노드 경우 == null을 반환 0.
그러나 노드 == null이는 다음이 - 오, 정확성에 문제가있는 경우.
그것은 당신이 내가 돌려 이었지만, 그건 지금 범위에 없습니다.
당신은 INT 난 단지 필요 그래서 = 0.
노드가 null이라면, 그 아직도, 0이 될 것입니다
우리는 0을 반환 할거야,이 사건이 동일하므로.
또 다른 일반적인 문제는 선언을 유지하는 것입니다
루프의 노드 내부의.
당신이 말하는 오 수 없음.
이 오늘로 유지하자.
아마, int는 전 = 0 여기에 넣어 것입니다
그런 다음 노드 * 노드 = 여기에서 첫번째.
그리고 지금 제거 - 점점 방법 때문일 수 있습니다.
이 내가 작성한 얼마나 때문일 수 있습니다.
이처럼에서도 보이는 수 있습니다.
여기에 루프 구조에 대한이
INT I = 0 등 거의 같은 자연이어야합니다
내가 배열의 길이보다 작 전 + +.
그게 당신이 배열을 통해 반복하는 방법은 경우,이는 연결리스트를 통해 반복하는 방법입니다.
>> 이 점에서 두 번째 특징이어야합니다.
염두에두고이 거의 같은 될 것입니다.
당신은 링크 된 목록을 통해 반복하려는거야.
만약 노드 I는 값이라고 아무 생각이 없습니다.
노드 i를.
해당 노드의 값은 = 내가 TRUE를 반환하고, 그게 다예요합니다.
공지 사항 우리가 어느 false를 반환 수있는 유일한 방법
우리는 전체 연결 목록을 통해 반복하고 TRUE를 반환하지 않을 경우이며,
그래서 그 사건이 무엇을하는지에 관해.
같은 측면 노트 우리가 아마 추가하거나 덧붙이하게하지 않습니다.
>> 빠른 마지막으로 확인합니다.
당신이 정적 키워드를 표시하는 경우, 그래서가 정적 정수 카운트가 = 0한다고 가정 해 보겠습니다
그리고 우리가 수를 + +, 당신은 기본적으로 전역 변수로 생각할 수,
난 그냥 우리가 길이를 구현하는 것 방법이 아니라고하더라도.
여기이 일을하고 + +를 계산거야.
우리가 우리의 수를 증가 아르의 연결 목록에 노드를 입력 할 수있는 방법입니다.
이 점은 정적 키워드의 의미입니다.
난 그냥 int는 카운트가 있다면 = 평범한 전역 변수가 될 것입니다 0.
어떤 정적 int는 카운트 수단 것은이 파일에 대한 전역 변수이다.
그것은 다른 파일에 대한 불가능합니다
당신이 시작하면 pset (5)의 생각 좋아해요.
, 당신은 두 speller.c을 가지고, 당신은 dictionary.c이
그리고 당신은 speller.c에 다음 아무 것도 글로벌 물건을 선언하는 경우
dictionary.c 반대로에 액세스 할 수 있습니다.
전역 변수는 모든. C 파일로 액세스 할 수 있습니다
하지만 정적 변수는 파일 자체 내에서 액세스 할 수 있습니다
안으로 dictionary.c의 맞춤법 검사기 또는 내부의,
이 내 배열의 크기를 내 변수를 선언 방식을 거라고
또는 사전에있는 단어의 전화 번호의 크기.
나는 사람에 접근했다는 전역 변수를 선언하지 않으므로하면,
사실 난 단지 내 자신의 목적을 위해 신경.
>> 이것에 대해 좋은 점은 또한 전체 이름 충돌 콘텐츠입니다.
다른 파일 개수라는​​ 전역 변수를 사용하려고 할 경우, 상황이 매우, 매우 잘못,
따라서이 잘 가지를 안전하게 유지하며, 당신은에 액세스 할 수 있습니다
그리고 다른 아무도 수 있으며, 다른 사람이 수라는 전역 변수를 선언한다면,
그때가 카운트라는 정적 변수에 영향을주지 않습니다.
그 정적이거야. 이 파일을 전역 변수입니다.
>> 뭔가에 질문이 있으십니까?
모든 세트. 안녕.
[CS50.TV]