kim031504   3년 전

보통 배열의 값을 초기화할 때 memset 함수를 사용합니다.

그런데, 아래 코드와 같이 2개의 초기화 방법이 있는데요,

memset을 이용한 초기화와 


직접 for문을 사용한 초기화 방법입니다.


물론,  직접 for문을 사용하면 문제에 주어진 배열 크기 N만큼 원하는 값으로 초기화하고,


memset을 이용하면 전체 배열을 초기화 하지만


어차피 범위 N을 고려하며 문제 풀이를 하므로 딱히 지장이 없어 memset을 사용합니다.

그런데 아래와 같이 memset을 이용한 초기화 방법 1로 초기화하면

d의 배열 값이 -123124215 이런식으로 쓰레기 값으로 넣어지더라구요...

그래서 초기화 방법 2와 같이 직접 for문으로 값을 넣어주는 방식으로 초기화 했는데요,

왜 이런 결과가 나오는 걸까요....?

exqt   3년 전

memset은 byte 단위로 초기화 합니다. 그래서 두 번째 인자는 byte 범위안에 들어가야 합니다.

대신 0과 -1은 잘 작동하는데 이는 정수는 비트로 표현하면 사이즈 상관없이 000..., 111...  이라서 작동합니다.

memset을 사용하여 큰 수로 초기화하고 싶으시다면 0x7f 쓰는 방법도 있습니다. (int 배열을 초기화 하는 경우 0x7f7f7f7f 로 초기화 됩니다.)

댓글을 작성하려면 로그인해야 합니다.