우리는 다음과 같은 코드가 있습니다sizeof 연산자를 사용하여 C에 변수를 저장하는 데 사용되는 바이트 수를 어떻게 계산합니까?
#include <stdio.h>
#define LEN 10
int main(void) {
int i;
int array[LEN];
int *p;
for (i = 0; i < LEN; i++) {
array[i] = i;
}
for (p = &array[0]; p < &array[LEN]; p++) {
printf("Address: %p ", p);
printf("Value: %d\n", *p);
}
return 0;
}
을 그리고 그것은 단절이 정수 변수를 저장하고, 줄 바꿈에 인쇄하는 데 사용하는 바이트 수를 찾아 우리를 요청하고, 우리에게 sizeof 연산자를 사용할 수있는 힌트를 제공합니다 . 이제
, 나는 포인터 멍청한 놈의 비트를, 그래서 이것은 아마도 정말 빠른 질문이다,하지만 난 인쇄해야합니다 :
printf("Size of int: %d", sizeof(p));
또는 sizeof(*p)
한 인쇄 4, 그리고 다른 인쇄물들 8. 나는 8을 향하여 기울어졌습니다 (이것은 단순히 p에서 오는 것입니다). 그것은 메모리 위치를 가리키는 것이지 변수를 가리키는 변수가 아닙니다. 그리고 8은 8 비트를 의미하므로 1 바이트가 답이 될까요?
'8'은 * 8 *을 의미하지 않습니다. 8 바이트를 의미합니다. –
sizeof (p)와 sizeof (* p)에는 차이가 있습니다. 첫 번째는 포인터의 크기이고 다른 하나는 포인터가 가리키는 크기입니다. Andrew Marshall과 동의합니다. 반환되는 값은 비트가 아닌 바이트이며, 표준에 따라 비트가 정의 된 단위 크기로 반환 될 것이라고 생각하지 않습니다. 포인터의 저장소 크기는 일반적으로 int의 크기와 같습니다. 이는 운영 체제가 효율적으로 저장할 수있는 것으로 정의되며 적어도 일반적으로 4 바이트 (32 비트) 또는 8 바이트 (64 비트)만큼 클 수 있습니다. – EdChum
괄호는 중복됩니다. 'sizeof p' 또는'sizeof * p'를 갖는 것이 좋습니다. 'return (0);에 괄호를 사용하지 않습니까? – pmg