#14. 포인터 (2) 및 배열
#13. 포인터
#포인터 포인터도 변수의 일종이다. 다른 변수의 주소값을 저장할 수 있는 변수이다. 일반 변수 앞에 어드레스 연산자인 '&'를 붙이면 해당 변수의 주소가 표현된다. #include using namespace std; int main
hyukee.tistory.com
# 포인터에서의 const 사용법
포인터에서도 상수자료형인 const를 사용할 수 있다.
다만 위치에 따라 그 const가 미치는 영향이 조금 달라진다.
int* ptr = nullptr;
에서
const int* ptr = nullptr;
int* const ptr = nullptr;
둘의 const 위치가 의미하는것이 다르다.
첫번째, const int* ptr 은 *ptr의 값의 수정이 불가능하다.
즉, 해당 포인터 주소의 자료값 수정이 불가능 하다는 말이다.
두번째, int* const ptr 은 ptr값의 수정이 불가능 하다.
즉, 해당 포인터가 가지고 있는 주소값 수정이 불가능 하다는 말이다.
아래는 예시이다.
#include <iostream> using namespace std; void main() { int a = 10, b = 20; const int* ptra = &a; int* const ptrb = &b; *ptra = b; // 불가능 ptra = &b; // 가능 *ptrb = a; // 가능 ptrb = &a; // 불가능 }
# 이중포인터
이중포인터란 단순하게 포인터 안에 포인터를 쓴 것이다.
이중포인터를 만들때는 다음과 같이 사용한다.
자료형** 변수명;
int a=1; 의 값이 있고, 그것의 주소값을 가지고 있는 int* ptr=&a; 의 포인터가 있을때
이 주소값을 저장하는 데이터의 주소가 또 있을 것이다.
그것을 다시한번 가리키는 것을 이중포인터라고 한다.
아래는 예시이다.
#include <iostream> using namespace std; void main() { int a = 10; int* ptr = &a; // a변수의 주소값을 가지고 있는 ptr int** pptr = &ptr; // ptr포인터변수의 주소값을 가지고 있는 pptr cout << "&ptr : " << &ptr << endl; // ptr의 주소값 cout << "pptr : " << pptr << endl; // ptr의 주소값 cout << "ptr : " << ptr << endl; // a주소값 cout << "*pptr : " << *pptr << endl; // ptr주소값을 역참조 -> a주소값 cout << "*ptr : " << *ptr << endl; // a주소값을 역참조 -> 변수a값 cout << "**pptr : " << **pptr << endl; // ptr주소값을 역참조 -> a주소값을 역참조 -> 변수a값 }

-----------------------------------------------
#배열
배열은 변수를 여러개 한번에 만드는 방법이다.
자료형 변수명[갯수];
ex) int array[10];
이때 array 배열변수는 array[0] ~ array[9] 까지 할당된다.
배열값을 0으로 초기화 하고 싶을 경우
ex) int array[10]={};
배열값을 주고 싶을 경우
ex) int array[10] = {1,2,3,4,5,6};
이때 array[0] 부터 array[5] 까지는 순서대로 1,2,3,4,5,6이 초기화되지만 그뒤 변수는 0으로 초기화된다
예를들어 array[6]=0이 된다.
주의!
배열의 갯수를 정할 때, 변수는 쓸 수 없다.
다만 그 변수가 const 로 상수화 되있다면 사용 가능하다.
int i;
cin >> i;
int array[i]={};
-> 불가능
const int i=10;
int array[i]={};
-> 가능
#배열과 포인터
배열과 포인터는 유사점이 있다.
#include <iostream> using namespace std; void main() { int array[5] = {1,2,3,4,5}; cout << array << endl; }
해당 코드를 출력해보면

배열의 주소값이 나온다.
*array을 사용해서 출력 해보면 1이 나오는데,
이 주소값은 첫번째 배열 즉, array[0]의 주소값임을 알 수 있다.
*(array+1)을 출력하면, 2가 나오고 *(array+2)를 출력하면 3이 나온다.
이는 array[n] = *(array+n) 이라는 말과 같다.