쌓고 쌓다

[C/C++] 2차원 배열을 배열 포인터로 조회 및 수정 본문

프로그래밍/C & C++

[C/C++] 2차원 배열을 배열 포인터로 조회 및 수정

승민아 2023. 1. 10. 12:53

포인터 배열: 포인터가 배열로 있는 것 -> 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로 받음

Comments