배열
배열을 사용하면 한 번에 여러개의 변수를 생성가능
잘못된 배열
인덱스가 배열의 크기를 벗어나게 되면 프로그램에 치명적인 오류를 발생시킨다.
c어서는 프로그래머가 인덱스가 범위를 벗어나지 않았는지 확인하고 책임을 져야한다.
배열과 함수
함수의 매개변수로 배열의 경우에는 사본이 아닌 원본이 전달됨
배열의 값을 서로 교환할 때
순차 탐색
순차 탐색은 배열의 원소를 순서대로 하나씩 꺼내서 탐색키와 비교하여 원하느 값을 찾아가는 방법
이진 탐색
이진 탐색은 정렬된 배열의 중앙에 위치한 원소와 비교 되풀이
포인터
포인터 : 주소를 가지는 변수
변수는 어디에 저장되는가?
- 변수는 메모리에 저장된다.
- 메모리는 바이트 단위로 엑게스된다.
- 첫번째 바이트의 주소는 0, 두번째 바이트는 1...
- 변수의 크기에 따라 차지하는 메모리 공간이 달라진다.
포인터와 변수의 연결
int i = 10;
int *p;
p = &i;
간접 참조 연산자
간접 참조 연산자 * : 포인터가 가리키는 값을 가져오는 연산자,
& 연산자 : 변수의 주소를 반환
- 연산자 : 포인터가 가리키는 고의 내용을 반환한다.
포인터의 증감
포인터는 증감, 감소, 덧셈, 뺄셈이 가능
*p++
p가 가리키는 위치에서 값을 가져온 후에 p를 증가
(*p)++
그 주소의 크기만큼 변화함
포인터 함수
인수 전달 방법
함수 호출 시에 인수 전달 방법
- 값의 의한 호출(call by value)
함수로 복사본이 전달된다.
기본적인 방법
- 참조에 의한 호출(call by reference)
함수로 원본이 전달된다.
c에서는 포인터를 이용하여 흉내 낼 수 있다.
포인터와 배열
- 배열과 포인터는 아주 밀접한 관계
- 배열 이름이 바로 포인터
- 포인터는 배열처럼 사용가능(인덱스 표기법을 포인터에서 사용가능)
배열보다 포인터를 사용하는 이유
포인터가 인덱스 표기법보다 빠름
why? 인덱스를 주소로 변환할 필요가 없다.
포인터를 반환할 때 주의점
- 함수가 종료되더라도 남아있는 변수의 주소를 반환하여야한다.
- 지역 변수의 주소를 반환하면, 함수가 종료되면 사라지기 때문에 오류
중간 점점
- 배열의 첫번째 원소의 주소를 계산하는 2가지 방법을 설명하라
&a[0] , a
- 배열 a[]에서 *a의 의미는 무엇인가
배열의 첫번째 원소값
- 배열의 이름에 다른 변수의 주소를 대입할 수있는가?
x
- 포인터를 이용하여 배열의 원소들을 참조할 수 있는가?
o
- 포인터를 배열의 이름처럼 사용할 수 있는가?
o
포인터 사용의 장점
- 연결 리스트나 이진트리 등의 향상된 자료 구조를 만들 수있다.
- 참조에 의한 호출
포인터를 매개변수로 이용하여 함수 외부의 변수의 값을 변경할 수 있다.
- 동적 메모리 할당ㅣ