memset
배열을 -1, 0, 1로 초기화가 필요할 때 memset을 이용하면 깔끔하고 편하다. 이전에 memset을 이용하여 배열 초기화 하는 방법을 작성한적이 있는데, 구조체의 멤버로 존재하는 배열의 초기화도 필요해서 추가 작성하게 되었다.
구현
헤더파일
#include <string.h> // C인 경우 #include <cstring> // C++인 경우
memset 기본형
void* memset(void* ptr, int value, size_t num) // memset(배열 주소, 초기화 값, 배열 사이즈)
동적할당 구조체의 memset 예제
배열은 포인터이고 구조체의 멤버로 들어가도 마찬가지다. 따라서 &연산자가 필요하지 않다.
동적할당이므로 구조체 멤버는 dot(.)이 아닌 화살표(->)를 사용한다.
배열 사이즈는 sizeof를 사용한다.
아래 예제는 -1로 초기화한다.
memset(struct->matrix, -1, sizeof(struct->matrix));
#include <stdio.h> #include <string.h> typedef struct { int matrix[40][40]; }test_st; int main() { test_st *test; test = (test_st*)malloc(sizeof(test_st)); printf("before : %d\n", test->matrix[0][0]); // before : 랜덤 값 memset(test->matrix, -1, sizeof(test->matrix)); printf("after : %d\n", test->matrix[0][0]); // after : -1 }
정적할당 구조체의 memset 예제
동적할당과 다른점은 구조체 멤버 선택이 화살표(->)가 아닌 dot(.)으로 바뀐것 뿐이다.
memset(struct.matrix, -1, sizeof(struct.matrix));
#include <stdio.h> #include <string.h> typedef struct { int matrix[40][40]; }test_st; int main() { test_st test2; printf("before : %d\n", test2.matrix[0][0]); // before : 랜덤값 memset(test2.matrix, -1, sizeof(test2.matrix)); printf("after : %d\n", test2.matrix[0][0]); // after : -1 }