때이것이 왜 다른가요? char dog [1000]; char * dog = (char *) malloc (1000 * sizeof (char));
char dog[1000];// i get size of 1000
char *dog = (char*)malloc(1000 * sizeof(char));// i get size of 8 ? why?
THX
때이것이 왜 다른가요? char dog [1000]; char * dog = (char *) malloc (1000 * sizeof (char));
char dog[1000];// i get size of 1000
char *dog = (char*)malloc(1000 * sizeof(char));// i get size of 8 ? why?
THX
위한 I "인쇄"sizeof의 (개) 제 1 가변 1000 개 문자의 배열 인 char[1000]
입력 갖는다.
두 번째 변수는 포인터 인 유형 char *
입니다. 귀하의 시스템에서 그것은 포인터가 8 (아마 당신이 64 비트 포인터를 가지고 있기 때문에)의 크기를 가지고 나타납니다.
하지만 첫 번째 포인터도 "dog"가 아니며 ("char"포인터 "가 아닌), 힙의 두 번째 포인터와 같은 스택에 있습니까? – jdl
@jdl : 아니요. 첫 번째 포인터 –
배열은 포인터로 저하되므로 포인터와 거의 같은 방식으로 사용할 수 있지만 배열의 sizeof()는 배열 전체의 크기를 나타냅니다. –
char *dog
은 단지 하나의 포인터 일 뿐이므로 char dog[1000]
은 문자 배열입니다.
주목할 점은 동적 배열 (char *dog
)이 알려지지 않은 반면 sizeof
dog[1000]
이 컴파일 타임에 알려졌다는 것입니다.
전자가 스택에 할당되고 후자가 힙에 할당되고 포인터로 참조되기 때문에. –