C언어 Memset함수에 관해서 .. 쉬운부분인데..
글쓴이: milk901 / 작성시간: 토, 2014/03/22 - 12:47오전
Memset 함수는 첫번쨰 인자로 포인터형을 받고 2번쨰는 주소의 채울값과 3번쨰는 할당될 바이트수 인데..
위와 같이 했을 경우에는 arr에 memset이 적용되서 전부다 배열안의 값이 0으로 바뀌는데 왜 두번쨰 값을 0이 아닌 10으로 바꿀떄는
모든값이 10으로 초기화가 되는게 아니라 주소값이 나와버리나요 ㅇ_ㅇ ?..
그리고 왜 주소값이 4바이트씩 전부 다르게 나와야 하는데 전부다 같게 나오는 이유도 좀 알수있을까요 ..?
#include
#include
void main()
{
int i;
int arr[10];
memset(arr,0,sizeof(int)*10);
for(i=0;i<10;i++)
{
printf("%d ", arr[i]);
}
}
Forums:
그게 왜 주소값이라고 생각하는지? 출력값을 이진수로
그게 왜 주소값이라고 생각하는지?
출력값을 이진수로 바꾸고 생각해보심..
죄송한데.. 출력값을 이진수로 바꾸라는게
죄송한데.. 출력값을 이진수로 바꾸라는게 무슨말뜻인지좀 알려주실수 있나요 ..?
%d가 10진수고 %x가 16진수 %o가 8진수 인데 2진수는 찾아봐도 없는데..
비트연산을 말씀하시는건가요 ?
나오는 수를 직접 2진수로 변환하던지, 계산기 같은
나오는 수를 직접 2진수로 변환하던지, 계산기 같은 프로그램으로 2진수로 바꾸어서 그 패턴을 살펴보라는 말씀이십니다.
그런데 %08x 로 16진수 표현을 살펴보는 정도로도 충분할 거 같습니다. 십진수 10은 16진수로 0x0a죠...
10말고 다른 수로 바꾸어서 살펴보시고, man memset 로 메뉴얼을 잘 읽어 보시고요.
aaa
aaaa
memset 함수의 설명입니다
http://www.cplusplus.com/reference/cstring/memset/
void * memset ( void * ptr, int value, size_t num );
Fill block of memory
Sets the first num bytes of the block of memory pointed by ptr to the specified value **(interpreted as an unsigned char).**
두번째 파라미터가 int라서 헷갈릴 여지가 있는데 (왜 이렇게 돼있는지는 모르겠습니다) 사실상 1바이트짜리 데이터라고 봐야 합니다.
결국 해당 메모리 영역을 지정받은 숫자(바이트)로 채우게 되는 겁니다. 따라서 10(=0x0a)을 넣고 나서 이걸 int단위로 찍으면 당연히 0x0a0a0a0a에 해당하는 int 숫자가 찍혀나오겠죠. 0으로 해도 똑같은 일이 일어나지만 단지 값이 0이라서 우연히 같은 결과가 나온 것 뿐.
int단위로 초기화를 하고 싶으시면, 적절한 배열 초기화를 사용하거나 for 루프를 돌면서 값을 채우시면 됩니다.
--
감사합니다!!
감사합니다!!
댓글 달기