C, C++

[C++] memset으로 정수 배열 초기화 하기

caez 2025. 1. 5. 13:32

안녕하세요. 오늘은 memset 함수로 정수 배열을 초기화 해보겠습니다.

 

C++에는 배열을 초기화하는 여러가지 방법이 있는데요.

이 중에 memset은 C에서 사용하는 자료형을 초기화할 때 자주 사용합니다.

 

memset으로 정수 배열 초기화 하기

우선 정수 배열을 선언하고 0으로 초기화 해볼게요.

int arr[10];

memset(arr, 0, sizeof(arr));

for (int i = 0; i < 10; i++)
	cout << arr[i] << ' ';

 

의도한 대로 잘 출력이 되었습니다.

 

이번에는 1으로 초기화를 해보겠습니다.

memset(arr, 1, sizeof(arr));

 

?

 

 

사실 memset은 1바이트 단위로 동작하는 함수입니다.

1로 초기화를 하면 각 int형 변수에 0x01010101가 저장되게 되는 것이죠.

 

반면 0x00로 표현되는 0과 0xFF로 표현되는 -1은 1바이트 단위로 초기화하여도 의도한 동작을 합니다. 

결국 memset 함수로는 0이나 -1이 아닌 값으로 정수 배열을 초기화할 수 없습니다.

memset으로 자료구조 초기화 하기

그렇다면 memset은 어떤 자료구조를 초기화 하기 위한 함수일까요?

 

우선 char형과 bool형 배열은 1 바이트 변수인데다 연속적인 메모리 공간을 사용하기 때문에 memset을 사용해도 아무런 문제가 없습니다.

다른 1 바이트 변수들도 같은 이유로 사용해도 문제가 없겠습니다.

 

POD 타입의 구조체에도 사용이 가능한데요.

POD(Plain Old Data) 타입이란 연산자 오버랩, private 멤버, 상속, 가상 함수 등이 없는 아주 단순한 자료 구조를 의미합니다.

 

그렇다면 각종 연산자, private 멤버, 상속, 포인터 등이 가득한 stl 자료형에는 memset을 절대 사용하면 안되겠네요.

결론

정수 배열을 초기화할 때는 for문을 사용하도록 합시다!

for (int i = 0; i < 10; i++)
	arr[i] = 1;

 

 

도움이 되셨다면 하트와 댓글 부탁드립니다.

'C, C++' 카테고리의 다른 글

[C] 포인터 별칭  (0) 2025.12.22