В случае, если...
int *ptr;
ptr = malloc(sizeof(*ptr));
Какое различие есть между sizeof(*ptr)
и sizeof(ptr)
?
sizeof(*ptr)
возвратит тебя tamaГ±o контента твоего указателя костлявая tamaГ±o одного int
, которого обычно 4
sizeof(ptr)
, возвратит тебе tamaГ±o direcciГіn в памяти из костлявого ptr tamaГ±o одного int*
, которого обычно 8
Согласно твоей архитектуре, даст тебе стоимость или другой
, если бы твоего кода было
char *ptr;
ptr = malloc(sizeof(*ptr));
sizeof(*ptr)
, возвратит тебя tamaГ±o одного char
, которого 1
sizeof(ptr)
, возвратит тебя tamaГ±o ее direcciГіn в memora одного char
, которого обычно 8
ВїQuГ© различие есть между
sizeof(*ptr)
иsizeof(ptr)
?
Различие очевидное:
sizeof(*ptr)
- tamaГ±o (size of) *ptr
. sizeof(ptr)
- tamaГ±o (size of) ptr
. В C, tamaГ±o данных предполагается в байт, asГ - что использовать sizeof
на целом числе 32 бит (которого обычно int
) возвращает стоимость, 4 (8 бит из-за байт).
В примере, что ты показал информацию ptr
, - типа метких до целого числа (int *
). tamaГ±o указателя измени segГєn архитектура на, который ты работал, когда могут быть 4 (32 битами) или 8 (64 битами). Особенность указателей состоит в том, что у них есть всегда тот же самый tamaГ±o независимо от типа информации, на которую они указывали бы:
int *pint;
short *pshort;
if (sizeof(pint) == sizeof(pshort))
printf("Eureka!\n");
cГіdigo предыдущий mostrarГЎ Eureka!
. Однако, у типов различных данных может быть один tamaГ±o различно:
int *pint;
short *pshort;
if (sizeof(*pint) == sizeof(*pshort))
printf("Eureka!\n");
cГіdigo предыдущий не mostrarГЎ совсем не, так как, когда оператор des-ссылки использует, (*
unario) мы попросим tamaГ±o (size of) , содержавший из указателя, не tamaГ±o указателя.
sizeof
- один funciГіn, что возвращает тебя tamaГ±o в байт parГЎmetro, что ты произошел с ним.
В твоем случае, ты должен иметь в виду, что меткий сторож - один direcciГіn памяти , и tamaГ±o этой direcciГіn он меняет segГєn твою архитектуру.
В процессоре нормальных из автобуса 32 бит, tamaГ±o одной direcciГіn памяти будет являться 32 бита или 4 Байт, так как из-за Вашей одинокой шины данных может redireccionar это количество памяти, поэтому в процессоры 32 бит только возможно распределять ему ОЗУ 4GB (mГЎs или меньше), в процессоре автобуса 64 бит, direcciГіn памяти будет она у одного tamaГ±o 64 бит или 8 Байт.
char *ptr;
size_t len = sizeof(ptr);
, если снопы это, ты печатаешь переменную len
, будешь получать или 4 или 8, в зависимости от твоей архитектуры и , не импортируя , что тип информации был, потому что ahГ - он консультируется, он tamaГ±o указателя (direcciГіn памяти) не типа информации в es если.
char *ptr1;
int *ptr2;
size_t len1 = sizeof(ptr1);
size_t len2 = sizeof(ptr2);
Поэтому razГіn, не импортируя, что переменная была типа char
и другая была типа int
, len1
и len2
obtendrГЎn тот же результат.
, Когда ты перемещаешь указатель со звездочкой напротив или оператором домашнего животного - ссылки, уже эти - соглашаясь на информацию, в которую esta обозначаясь, ahГ - если diferenciarГ, - в который тип информации, которыми они обладают различные tamaГ±os.
char *ptr1;
int *ptr2;
size_t len1 = sizeof(*ptr1);
size_t len2 = sizeof(*ptr2);
В этом примере, если habrГЎ различие, потому что ptr1
обозначается, - в тип информации char
, одинокая которая 1 Байт, и ptr2
укажи на тип информации int
, которая 4 байт.