kimsy96   3년 전

밑에 질문을 보고 갑자기 memset과 fill의 차이가 궁금해져서(사실은 fill 이란게 있는줄 몰랐습니다 하하.. 그냥 루프문 만들어서 초기화를 했었는데 요즘 memset을 종종 사용하곤 합니다) 알아봤는데

memset(배열이름, 초기화할 값, 배열크기);

배열 크기는 주로 sizeof()를 사용하여 구한다.

memset은 1바이트를 단위로 초기화가 되기 때문에 1바이트를 넘는 데이터형들은 0이외의 값으로 초기화 할 수 없다. 예를 들어 4바이트인 int를 1로 초기화를 하려고 하면 1바이트마다 1로 초기화가 되기 때문에 실제로 int에 들어가게 되는 값은 1000000010000000100000001가 되며 10진수로 표현하면 2^24+2^16+2^8+1 = 16843009가 나오게 된다.

요런 내용이 있더라고요.

제가 종종 루프문 만들기 귀찮아서 int형 배열들(1,2차원)들을 memset을 이용해서 초기화해서 풀었는데 딱히 이거때매 틀린 문제는 없었는데 그냥 운이 좋았던 건가요 아니면 memset을 bool 이나 char 배열 초기화 할때 말고도 사용해도 되나요 

Green55   3년 전

0은 000... 이고, -1은 111... 이라 가능하지만, 그 외의 수는 불가능합니다.

djm03178   3년 전

보통 초기화라고 하면 거의 0으로 하죠. 0은 모든 비트가 0이니 4바이트로 늘려도 0 뿐이니 상관 없지만, 큰 수를 넣으려고 했다면 아마 문제가 됐을 거예요.

kimsy96   3년 전

기억은 잘안나는데 배열을 1이나 2로 초기화했던 걸로 기억합니다.

초기화하고 그위에 다시 값을 덮으니 문제가 없었던거 같은데

잘못된 습관이었네요

감사합니다 

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