[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입니다.