Pointer
- 포인터: 어떤 변수의 메모리상의 주소값을 저장하고 있는 것
- 일반 변수: 일반적인 데이터(상수)를 저장할 수 있는 기억장소
- 포인터 변수: 일반 변수의 주소값을 저장할 수 있는 기억장소, 일반적으로 포인터라고 함
- datatype: 저장하고 있는 주소값의 변수형과 동일
ex) int *, float *, double * (*: 아스트리크) - 주소값 저장하는 법: (datatype) *(pointer name) = &(variable); (&: 엠프센트)
ex) int *pnum = # - Dereference(역참조): 주소를 통해 포인터가 변수 값에 접근하는 것
+추가 - 함수가 호출될 때 매개변수에 인자를 어떤 방식으로 넣어줄건지에 대한 개념
- Call by address: 주소에 의한 전달, 포인터가 가리키는 주소값의 변수
- Call by value: 값에 의한 전달, 저장된 상수
- Call by reference: 참조에 의한 전달, 주소값
- Reference(참조자): 할당된 메모리 공간의 둘 이상의 이름을 붙이는 것(별명같은 것)
int *ptr = # //num의 주소값을 포인터 변수 ptr에 저장해라! int &num2 = num1; //num1에 대한 참조자 num2를 선언해라!
Array
Basic of array
- array(배열): 같은 datatype의 변수들을 연속적으로 저장할 수 있는 변수의 연속 -> 변수들은 인접한 메모리 지역에 연속적으로 저장됨 -> 이 연속적인 변수가 저장된 메모리 = aaray
- array declaration: (datatype) (array name)[i-th element]
ex) int myarr[5] = {1,2,3,4,5}; - [] operator 안에는 있는 숫자의 배열 사이즈를 결정
- size of array: (number of element)*(size of element)
ex) int arr[5]; 는 int 하나당 4byte이고 이것이 5개 있으니 size of array은 20bytes - 보통은 size를 const로 고정시켜 사용하기도 함
const int SIZE = 5;
int arr[SIZE];
- subscripts(array의 순서): 0부터 시작, 마지막은 n-1
- 많은 문제에서 array를 입력 받을 때 for문을 많이 활용
int arr[5]; for(int i=0; i<5; i++) { cin << arr[i]; }
Array symbol
- array symbol: 배열을 호출하면 그 배열의 첫번째 element의 주소값을 반환, *arr 면 첫번째 element를 반환
- 매개변수로 배열을 받고 싶을 때: int arr[] or int *arr
- * *arr[i] == *(arr+i) *
- arr는 그 배열의 첫번째 주소이기 때문에 그 주소에 i만큼 더한 주소값은 arr[i]의 주소값과 같아지기 때문
Array operation
- Find operation
- start index from the starting point
- Jump into loop
- check whether the element is k. If true, return the index
- Increase index and go back to the loop condition
- Insert operation
- shift elements after i-1 right
- store k value at the i-th space
- Delete operation
- shift elements from index i+1 one-space left
- decrease the array length