[C, C++] 구조체 배열 멤버 memset으로 초기화

memset

배열을 -1, 0, 1로 초기화가 필요할 때 memset을 이용하면 깔끔하고 편하다. 이전에 memset을 이용하여 배열 초기화 하는 방법을 작성한적이 있는데, 구조체의 멤버로 존재하는 배열의 초기화도 필요해서 추가 작성하게 되었다.

[C, C++] 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
}

Leave a Comment