알고리즘

[알고리즘] 배열2

FORHAPPy 2021. 9. 29. 12:58

선언과 정의

 

선언 : 컴파일러에게 대상에 대한 정보만을 알려주어 메모리가 아직 할당되지 않는다.

정의 : 컴파일러에게 대상의 실제 내용을 생성하게 한다. 실제 내용을 생성하고 할당한다.

 

메모리 구조

 

데이터 영역: 프로그램 시작하면 할당하고 프로그램이 종료하면 메모리 해제 (전역변수, 정적변수)

스택 영역: 함수 호출시 생성되고 함수호출이 완료되면 사라짐 (지역변수, 매개변수)

힙영역 : 필요에 따라 동적메모리를 할당->프로그램이 실행되는 동안 (런타임 시점)결정해야하는 경우

 

최댓값 구하기

주사 : 아래처럼 배열의 요소를 하나씩 차례로 살펴보는 과정을 알고리즘 용어로 주사 라고한다.

         즉, 스캐닝 한다는 말과 같다.

  1. 상수사용 최소화하기 위해 전역변수로 배열 사이즈를 선언하였다.
  2. 그냥 int N = 5라고 했으면 arr [N]이 컴파일 에러가 난다. 배열의 요소개수에 변수는 들어갈 수 없다.
  3. 요즘 포인터를 해서 다 포인터로 넘겨줘야 한다고 생각하나, 값을 넘겨줄 경우 return 하여 돌려받는다.
  4. 돌려받을 자료형과 함수의 반환형은 일치해야한다.
  5. 배열을 넘겨주는건 주소값을 넘겨주는거랑 같은 말이다. 그러나 max는 함수내에서 선언되었기 떼문에 return 값으로 돌려받았다.
  6. 마지막 MaxiArr(iArr)에서 그냥 MaxiArr를 대입하여 컴파일에러가 나서 주의...

max로 치환시켜준 식이다. 좀더 깜끔해 보인다.

넘겨준 배열의 요소값이 바뀌지 않기 위해 const를 붙여주었다.

 

  1. 사람의 수를 먼저 입력 받았다.
  2. 2번에서 사람의 수만큼 배열을 동적할당을 한다.
  3. 동적할당된 곳에 사람의 키를 하나하나 입력을 받는다.
  4. 입력받은 키중 가장 큰 키를 함수 1번 함수를 통하여 구한다.
  5. 3번은 매개변수로 key (주소값저장된 포인터)를 넘겨줬는데 이게 배열인지 그냥 포인터인지는 매개변수가 알수가 없다. 그냥 주소값을 넘겨 받은게 끝이다. 그러므로 배열의 크기 역시 매개변수로 전달 받았다.