swap의 특징 : 1대 1 교환
● ● 포인터 심화
● const
변수앞에 const를 붙이면 해당 변수가 상수화 된다.
변수가 상수화 되기 때문에 곡 선언시에 초기화 해야한다 그렇지 않으면 값을 변경 할 수 없다.
const int max = 5;
int a[max] = {}; 가능함
const 변수는 변수를 상수화 했기 대문에 선언이 가능하다
C++에서만 가능
● 포인터와 const
포인터는 일반변수보다 복잡하다
keypoint는 const의 위치
int a = 10
int b = 20;
const int * p = &a;
*p = 10; // 안됨
p = &a; // 됨
*p가 상수화 되는 것은 변수의 상수화이다 p의 주소값은 변경이 된다.
※ 근데 저상태에서 a=10 의 직접대입은 되는듯 ?
int a = 10
int b = 20;
int *const p = &a;
*p = 10; // 됨
p = &a; // 안됨
p가 상수화 되는 것은 주소값의 상수화이다
*p의 주소값은 변경이 된다.
즉
*의 기준으로 const 위치에 따라 다름
*앞에 붙으면 포인터가 가리키는 변수의 값 변경 불가능
*뒤에 붙으면 포인터 변수의 주소값이 변경 불가능
const int const *p 이것은 const int *p와 같다
즉 자료형은 const와 연관성이 없다.
● 포인터와 + 연산자
해당 자료형 크기만큼 주소값을 더한다
int 형 변수일 경우
1000(주소) + 1 = 1004
1000(주소) + 2 = 1008
1000(주소) + 3 = 1012
모배열은 포인터이기 때문에 + 를 사용하면 해당 메모리 공간에서 자료형 만큼 이동한 주소를 의미
포인터의 * 연산자는 해당 주소값에 위치한 변수를 의미한다
*(p+i) = 우선순위 때문에 괄호로 포인터 차단