포인터 변수는 배열과 호환이 되기 때문에 자료형만 맞춰주면 그냥 대입해도 된다.
void main(void)
{
int Ary[5] = {1, 2, 3, 4, 5};
// 보통 일반 변수는 포인터에 값을 대입할 때, &를 넣어줘야 되자만 배열을 필요없음.
// 첫 번째 원소를 가르킨다.
int *p = Ary; // 그대로 대입
for (int i=0; i < 5; i++){
cout << *p << endl;
// 다음 원소를 가리킴.
p++;
}
}
배열 포인터는 배열처럼 사용이 가능하다.
void main(void){
int Ary[5] = {1, 2 ,3, 4, 5};
int *p = Ary;
for (int i=0; i < 5; i++){
// 포인터를 배열처럼 사용 가능, p[i] == *(p+i)
cout << p[i] << " ";
// *(Ary + i) == Ary[i]
cout << *(Ary + i) << endl;
}
}
void main(void) {
int *p;
// 동적 메모리 할당
p = new int;
*p = 5;
cout << *p << endl;
// 동적 메모리 해제
delete p;
// 메모리 동적할당
p1 = new int[5];
for(int i=0; i<5; i++){
p1[i] = i + 1;
cout << p1[i] << "";
}
// 배열로 할당받은 경우, 반드시 [] 사용해야된다.
delete []p1;
}
void main(void){
int a;
// b는 a와 동일한 위치에 참조를 하고 있는 것
int &b = a;
int &c = b;
c = 5;
int *p = &a;
****int *q = p;
*q = 7;
int ary[3];
int (&rAry)[3] = ary;
rAry[1] = 3;
}
flowchart
B[B변수] --참조--> A[A의 주소]
C[C변수] --참조--> A[A의 주소]
P[p변수] --참조--> A[A의 주소]
Q[q변수] --> P[p변수]
주소값에 a를 넣게되면, a의 주소 값이 들어가는게 아닌, a랑 같은 메모리에 위치한 곳을 참조하고 있다는 뜻이다. 그래서 c=5를 하게되면 a의 값도 똑같이 변하게된다.
#include <iostream>
int main() {
// 이중 포인터 선언
int **matrix;
// 행과 열의 크기
int rows = 3;
int cols = 4;
// 행의 크기만큼 포인터 배열 동적 할당
matrix = new int*[rows];
// 각 행마다 열의 크기만큼 메모리 동적 할당
for (int i = 0; i < rows; ++i) {
matrix[i] = new int[cols];
}
// 값 초기화
int count = 1;
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
matrix[i][j] = count++;
}
}
// 출력
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
std::cout << matrix[i][j] << " ";
}
std::cout << std::endl;
}
// 메모리 해제
for (int i = 0; i < rows; ++i) {
delete[] matrix[i];
}
// 배열 포인터는 마지막에 이런식으로 해제함.
delete[] matrix;
return 0;
}