알고리즘 문제를 풀 때 일차원 배열을 memset 함수를 통해 초기화하는 경우 아래와 같이 코드를 작성합니다.
#include <iostream>
#include <cstring>
using namespace std;
const int MAX = 100;
int arr[MAX];
memset(arr, 0, sizeof(arr));
하지만, 이차원 배열에 대해서는 위와 같이 처리하면 안되고 아래와 같이 코드를 작성해야 합니다.
수정) 2020.06.05 17:48
이차원 배열에 대해서도 동일 scope 내에서는 memset(arr, 0, sizeof(arr));와 같이 초기화할 수 있습니다.
하지만, 함수내에서 선언되지 않은 배열을 함수 내에서 초기화할 경우 배열명이 배열을 가리키는 포인터가 되므로 sizeof(arr)이 arr의 size를 정상적으로 반환하지 않습니다.
따라서, memset(array, 0, sizeof(array[0][0] * ROW_MAX * COL_MAX)와 같이 작성해야 합니다.
혹은 아래 코드처럼 반복문을 통해 초기화를 진행해주셔야 합니다.
This will definitely work,
memset(array, 0, sizeof(array[0][0]) * m * n);
One important point is that It works only in the scope where array was declared. If you pass it to a function, then the name array decays to a pointer, and sizeof will not give you the size of the array.
출처) https://www.quora.com/How-can-one-use-memset-in-C++-for-two-dimensional-arrays
#include <iostream>
#include <cstring>
using namespace std;
const int ROW_MAX = 50;
const int COL_MAX = 100;
int arr[COL_MAX][ROW_MAX];
for(int i=0; i<COL_MAX; i++)
{
memset(arr[i], 0, sizeof(arr[i]));
}
* 다차원 배열 또한 똑같은 로직으로 접근하여 초기화해주면 됩니다!
[출처] https://www.quora.com/How-can-one-use-memset-in-C++-for-two-dimensional-arrays
'[DEV] 기록' 카테고리의 다른 글
C++ >?= 문법 (1) | 2020.06.18 |
---|---|
통신사별 DNS 서버 IP 주소 정리 (0) | 2020.06.16 |
React props로 전달한 문자열 개행 처리하는 방법 (0) | 2020.05.22 |
React url 링크 클릭 시 새 탭으로 페이지 띄우는 방법 (0) | 2020.05.20 |
스프링 HTTP PUT/DELETE 메서드 차단하는 방법 (0) | 2020.05.17 |