[Powered by Google Translate] 의 배열에 대해 얘기하자. 그럼 왜 우리는 어느 배열을 사용하면 어떤 점이 좋습니까? 자, 당신도 오 학생 ID를 저장하기 위해 필요한 프로그램을 말한다. 은 5 별도의 변수를 가지고 합리적인 것 같습니다 수도 있습니다. 우리가 잠시 표시됩니다 이유로, 우리는 0부터 카운트를 시작합니다. 우리가해야 변수는 정수 id0, INT ID1 등 될 것입니다. 우리는 학생 ID를 수행 할 모든 로직은 복사 붙여 넣기를해야합니다 이 학생 ID의 각. 우리는 학생들이 CS50에 있어야 발생하는 확인하려면 우리가 처음 id0이 과정에서 학생을 나타냅니다 있는지 확인해야합니다. 그런 다음 학생에게 동일한 작업을 수행하기 위해 id0의 코드를 복사 및 붙여 넣기해야합니다 그리고 ID2, 3, 4 ID1과 등 id0의 모든 발생을 교체하십시오. 최대한 빨리 우리가 복사 및 붙여 넣기해야 소리로 당신은 더 나은 솔루션이 있다는 생각을 시작해야합니다. 이제 어떻게 당신이 5 학생 ID를 필요가 아니라 일곱하지 않는 걸 알게되면 어쩌죠? 당신은 소스 코드로 돌아가 id5에 추가 id6이 필요 ID는이 2 개의 새 ID에 대한 클래스에 속하는 경우와 확인에 대한 논리를 복사하여 붙여 넣습니다. 함께 모든 ID를 연결 아무런 문제가 없어, 그래서 묻는 방법이 없습니다 이 프로그램은 6을 통해 ID를 0이 작업을 수행합니다. 자 이제 당신은 100 학생 ID가 알고 있습니다. 그것은 따로 ID를 각각 선언해야 할 이상적인 이하 같다하기 시작 이들 새로운 ID에 대한 논리를 복사하여 붙여 넣습니다. 하지만, 우리는 결정하고, 우리는 모두 100 명에 대해 할 수 있습니다. 당신이 모르는 경우 그러나 실제로 얼마나 많은 학생들이 무엇 있죠? 몇 가지 N 학생들은 단지 귀하의 프로그램은 n은이라는 걸 어떻게 사용자를 부탁합니다. 오 음. 이것은 매우 잘 작동하지 않을 수 있습니다. 프로그램은 학생들의 일부 상수에 적용됩니다. 이러한 문제를 모두 해결하는 것은 배열의 아름다움입니다. 따라서 배열은 무엇인가? 일부 프로그래밍 언어에서 배열 형식은, 좀 더 많은 일을 할 수있을 것 당신은 C.에서 볼 수 마찬가지로 그러나 여기서 우리는 기본 배열 데이터 구조에 초점을합니다 배열은 메모리의 굉장한 블록입니다. 그게 전부 야. 우리는 우리가 우리가 어떤 블록을 의미, 10 정수의 배열을 말할 때 메모리가 그 10 별도의 정수를 개최 할 수있을만큼 큰 것입니다. 정수는 4 바이트입니다 가정 할 때, 이는 10 정수의 배열 메모리에 40 바이트의 연속 블록입니다. 우리가 여기에 가지 않을거야 다차원 배열을 사용했을 때조차도 그것은 여전히​​ 메모리의 굉장한 블록입니다. 다차원 표현은 단지 편의를합니다. 당신은 정수의 3 다차원 배열하여 3이있는 경우 다음 프로그램은 단지 36 바이트의 큰 블록으로 취급합니다. 정수의 총 수는 3 회 3, 각 정수는 4 바이트를 차지합니다. 가 기본 예를 살펴 보자. 우리는 여기서 선언 배열의 2 가지 다른 방법을 볼 수 있습니다. 우리는 컴파일하는 프로그램 중 1 주석해야합니다 우리는 두 번 x를 선언 때문입니다. 우리는 약간의 선언 이러한 2 가지 종류의 차이를 살펴됩니다. 이 라인은 모두, 크기 N의 배열을 선언 우리가 어디에 # 10로 N을 정의하고 있습니다. 우리는 쉽게 양의 정수에 대한 사용자 요청 수 와 배열의 구성 요소 수와 같은 그 정수를 사용했습니다. 전에 학생 ID의 예를 좋아이 완전히 별도의 10 선언과 같은 가지입니다 상상의 변수, X0, X1, X2 등 xN-1까지 있습니다. 우리가 배열을 선언 할 곳 라인을 무시 대괄호가 손상 발견 루프의 내부. 우리는 X처럼 작성할 때 [3], 그 난 그냥, X 받침대 3으로 읽히 당신은 상상의 X3를 요청 좋아라고 생각 할 수 있습니다. 그 괄호 내부의 수, 크기, N, 의미의 배열과보다 주목 우리가 색인에 전화 할게하는 0에서 N-1에 어떤 수 이는 N의 인덱스의 총입니다. 이 실제로 작동하는 방법에 대해 생각 배열 메모리의 큰 블록입니다 기억 해요. 정수는 4 바이트입니다 가정, 전체 배열 x는 메모리의 40 바이트 블록입니다. 그럼 X0는 블록의 첫 4 바이트를 의미합니다. X [1] 다음 4 바이트 등을 말합니다. 이 X의 시작 적이를 추적 할 필요가있는 모든 프로그램을 의미합니다. 당신은 X [400] 사용하려면 다음 프로그램이 동일합니다 것을 알고 X의 시작 후 불과 1,600 바이트. 우리가에서 1,600 바이트를 어디서 났어요? 이 정수 당 400 배나 4 바이트입니다. 에 이동하기 전에, 그것은 실현하는 것이 매우 중요하다고 C에서 우리가 배열에 사용하는 인덱스의 더 집행이 없습니다. 우리 큰 블록은 10 정수 긴하지만, 우리는 X [20] 작성하면 아무것도 우리에게 소리하지 않습니다 또는 X [-5]. 지수는 숫자 여야 할 필요는 없습니다. 그것은 임의의 표현이 될 수 있습니다. 이 프로그램에서 우리는 배열에 색인에 루프의에서 변수 i를 사용합니다. 이것은 내가 = 0에서 배열의 길이에 루프, 매우 일반적인 패턴입니다 그리고 배열의 인덱스로 i를 사용합니다. 전체 배열 이상이 효율적으로 루프를 이러한 방법으로, 그리고 여러분은 배열의 각 지점에 할당 또는 일부 계산을 위해 사용할 수 있습니다. 루프에 대한 첫 번째에, 내가, 0에서 시작 그리고 그 배열의 0 점, 0이란 값의 2 배에 할당됩니다. 그러다 증가, 우리는 값이 1 번 2 배열에서 첫번째 장소를 지정합니다. 그런 다음 우리는 배열에서 N-1을 배치하도록에 다시 그래서 내가 단위로 할당 될 때까지 값을 N-1 번 2. 그래서 우리는 처음 10도 숫자 배열을 만들었습니다. 아마 고르게하는 X보다 변수에 대해 조금 더 멋진 이름 이겠지만, 하지만 그 거리에 물건을 준 것입니다. 루프에 대한 두 번째는 우리가 이미 배열의 내부에 저장 한 값을 인쇄합니다. 배열 선언의 두 가지 유형으로 프로그램을 실행 해 보자 그리고 프로그램의 출력에서​​ 살펴보십시오. 까지 우리가 볼 수 있듯이,이 프로그램은 선언의 두 가지 유형에 대해 동일한 방법으로 동작합니다. 우리가 N에서 중지하지 첫 번째 루프를 변경하는 경우의 또 무슨 일을 살펴 보자 오히려 10,000 말한다. 배열의 끝없는 방법입니다. 죄송합니다. 아마 당신은 전에 본 적이 있어요. 세분화 잘못 프로그램이 작동을 멈췄습니다 의미합니다. 당신은 당신이 만지고하지 말아야 메모리의 영역을 터치 할 때 당신은 이걸보고 시작합니다. 여기 우리는 X의 시작 초과 10,000 곳을 건 드리는거야 어떤 사람은 분명히 우리가 만지는해서는 안됩니다 메모리에있는 곳입니다. 우리 대부분 그래서 아마도 실수로 대신 N의 10,000 넣어하지 않을 우리가 같은 더 미묘한 짓을한다면 쓰기 이하 N 같 무슨 말을 반대로를위한 루프 상태 N. 미만 배열은 0에서 N-1 인덱스를 가지고 기억 이는 인덱스 N은 배열의 끝 넘어 있다는 것을 의미합니다. 이 프로그램은이 경우에 충돌하지 않을 수 있습니다,하지만 여전히 오류입니다. 사실,이 오류가 있다면, 그건 자신의 이름이 너무 일반적입니다 오류 1의 해제. 기본에 대한 그것입니다. 따라서 배열 선언의 2 종류 사이의 주요 차이점은 무엇입니까? 메모리의 큰 블록 어디로가는 하나의 차이입니다. 첫 번째 선언에서, 나는, 브라켓 - 배열 유형을하는 전화 할게 이입니다하지만 더는 종래의 이름을 의미합니다 이 스택에 이동합니다. 나는 포인터 배열 유형에 전화 할게 두 번째에 반해,이 힙에 이동합니다. 이 때, 함수의 반환, 브라켓 배열이 자동으로 deallocated된다는 것을 의미합니다 당신은 명시 적 포인터 배열에 무료로 전화해야하기 때문에 반면에 또는 다른 당신은 메모리 누수가 있습니다. 또한, 브래킷 배열은 실제로 변수가 아닙니다. 이 중요합니다. 단지 상징 이죠. 당신은 컴파일러가 당신을 위해 선택하는 상수로 생각할 수 있습니다. 이것은 우리가 X + + 브라켓 형과 같은 일을 할 수 있다는 것을 의미 이 포인터 유형이 완벽하게 유효하지만. 포인터 유형 변수입니다. 포인터 타입의 경우, 우리는 메모리의 2 개의 블록이 있습니다. 변수 x 자체는 스택에 저장하고 단지 하나의 포인터입니다 하지만 메모리의 큰 블록은 힙에 저장됩니다. 스택에있는 변수 x는 주소를 저장 힙에 메모리의 큰 블록의. 이 중 하나 함축 된 의미는 연산자의 크기입니다. 이 브라켓 배열의 크기를 요청하는 경우, 당신에게 메모리의 큰 블록의 크기를 제공합니다 40 바이트 같은, 하지만 배열의 포인터 타입의 크기를 요청하는 경우, 당신에게 어플라이언스에 단 4 바이트 가능성이 변수 x 자체의 크기를 제공합니다. 포인터 배열 타입 사용, 직접 요청하는 것은 불가능합니다 메모리의 큰 블록의 크기입니다. 우리는 매우 드물게 크기를 원하는 없기 때문에 이것은 보통 많은 제한하지 않습니다 의 큰 메모리 블록, 그리고 우리가 필요한 경우 우리는 보통 그것을 계산할 수 있습니다. 마지막으로, 브래킷 배열은 배열을 초기화에 대한 바로 가기를 제공하기 위해 발생합니다. 우리가 바로 가기 initilization를 사용하여 처음 10도 정수를 작성할 수 방법을 알아 보자. 포인터 배열을 통해이 같은 바로 가기를 할 수있는 방법이 없습니다. 이 메시지는 배열로 무엇을 할 수에 대한 소개입니다. 그들은 당신이 쓰는 거의 모든 프로그램에 표시됩니다. 운이 좋다면 당신은 지금 학생 ID를 예를하는 더 좋은 방법을 볼 수 있습니다 동영상의 처음부터. 내 이름은 롭 보덴 있으며,이 CS50입니다.