쌓고 쌓다
[C/C++] 2차원 배열을 배열 포인터로 조회 및 수정 본문
포인터 배열: 포인터가 배열로 있는 것 -> int* ptrarr[2]
배열 포인터: 배열을 가리키는 포인터 -> int (*arrptr)[2]
앞의 단어를 수식어라고 생각한다.
2차원 배열이 아래처럼 있다고 하자.
2차원 배열
int arr2[2][2] = { {1,2},{3,4} };
2차원 배열 조회 및 수정
void ex3(int (*ptr)[2]) { // int ptr[2][2]도 가능 (call by reference임)
//조회
cout << "ptr[0][0]: " << ptr[0][0] << "\n";
cout << "ptr[0][1]: " << ptr[0][1] << "\n";
cout << "ptr[1][0]: " << ptr[1][0] << "\n";
cout << "ptr[1][1]: " << ptr[1][1] << "\n";
//수정
*(ptr + 0)[0] = 99;
ptr[0][0] = 99;
}
int main(){
int arr2[2][2] = { {1,2},{3,4} };
ex3(arr2); // 가능: ex3(&arr2[0])
}
1차원 배열
void ex2(int* ptr) { // int ptr[5]도 가능
// 조회
cout << "*(ptr+0): " << *(ptr+0) <<"\n";
cout << "*(ptr+1): " << *(ptr+1) << "\n";
cout << "*(ptr+2): " << *(ptr+2) << "\n";
cout << "*(ptr+3): " << *(ptr+3) << "\n";
cout << "*(ptr+4): " << *(ptr+4) << "\n";
cout << "ptr[0]: " << ptr[0] << "\n";
cout << "ptr[1]: " << ptr[1] << "\n";
cout << "ptr[2]: " << ptr[2] << "\n";
cout << "ptr[3]: " << ptr[3] << "\n";
cout << "ptr[4]: " << ptr[4] << "\n";
// 수정 또한 동일하게 가능함.
*(ptr + 0) = 9;
ptr[0] = 9;
}
int main(void){
int arr1[5] = { 1,2,3,4,5 };
ex2(arr1); // 가능: ex2(&arr[0])
}
vector의 경우
vector<vector<int>> v는 참조자로 vector<vector<int>>& v로 받자 그럼 reference이고
그냥 vector<vector<int>> v는 value로 받음
'프로그래밍 > C & C++' 카테고리의 다른 글
openGL(GL, GLU, GLUT) 설치 방법 (0) | 2022.11.12 |
---|---|
[C++] map에서 [ ] 사용시 주의할 점 (0) | 2022.10.09 |
[C++] 정렬(sort 함수), compare 함수 만들기(정렬 기준 만들기) (0) | 2022.07.12 |
[C++] 배열 초기화 - fill 함수 (0) | 2022.07.09 |
[C++] 역순 만들기(뒤집기) reverse 함수 (0) | 2022.07.09 |
Comments