개발 소발/개발 C++(기초)
c++ 동적할당배열,포인터와 const
우기!
2019. 7. 26. 14:54
동적 할당 배열 Dynamically Allocation Arrays
동적 할당 배열은 메모리를 나중에 할당 받을 수 있다.
배열에 들어갈 값을 미리 정해놓을 수 있지만 할당받을 크기보다 크다면 에러가 난다.
동적 할당 배열 반납방법 : delete[]
#include <iostream>
using namespace std;
int main()
{
//정적 할당 배열은 컴파일될때 배열의 크기가 고정되어야한다.
const int length = 5;
//정적 할당 배열
int arr[length] = { 1,2,3,4,5 };
int dlen;
cin >> dlen;
//동적 할당 배열 받기
int *ptrArr = new int[dlen];
for (int i = 0; i < dlen; i++) {
cout << "i : " << i << endl;
ptrArr[i] = i;
cout << (uintptr_t)&ptrArr[i] << endl;
cout << ptrArr[i] << endl;
}
delete[] ptrArr;
ptrArr = nullptr;
return 0;
}
포인터에도 const를 사용할 수 있다.
const의 위치마다 결과가 다르다.
주소에 접근해 데이터를 변경할 수 없다.
const int *ptr = &value;
메모리 주소를 변경할 수 없다.
int *const ptr = &value;
메모리주소,주소안의 데이터를 모두 변경할 수 없다.
const int *const ptr = &value;
const활용 자세한 설명
#include <iostream>
using namespace std;
int main()
{
int value = 5;
const int *ptr2 = &value;
cout << *ptr2 << endl;
//역참조는 불가능하다.
//포인터를 이용해 값을 변경하지 않겠다는 표현으로 생각할 수 있다.
//*ptr = 6;
int value2 = 3;
//주소에 있는 값을 바꾸지 않겠다는 말이다.
ptr2 = &value2;
cout << *ptr2 << endl;
//에러가난다.
//*ptr2 = 6;
//포인터 자체를 상수로 만들기
int *const ptr = &value;
//주소값을 변경할 수 없다.
//ptr = &value2;
//모든것이 변경 불가능하다.
const int *const ptr3 = &value;
return 0;
}