[DEV] 기록

C++ 이차원 배열 memset 함수를 통해 초기화하는 방법

꾸준함. 2020. 6. 2. 22:38

알고리즘 문제를 풀 때 일차원 배열을 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

 

How can one use memset() in C++ for two dimensional arrays?

Answer (1 of 4): [code]memset(array, 0, sizeof(array[0][0]) * m * n); [/code]Where [code ]m[/code] and [code ]n[/code] are the width and height of the two-dimensional array (in your example, you have a square two-dimensional array, so [code ]m == n[/code])

www.quora.com

#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

반응형