если ваша машина 32 бита вы будете получить размер указателя всегда 4 байта любого типа
данных, если ваша машина 64 бита вы получите размер указателя всегда 8 байт любого типа
данных, если объявить статический массив, вы получите размер с помощью sizeof
int a[10];
printf("Size:%lu",sizeof(a));
Но вы не получили размер массива, который блокируется указателем. где память для блока распределяется динамически с использованием malloc.
посмотреть код ниже:
#include <stdio.h>
#include<stdlib.h>
int main()
{
int i;
int *ptr = (int *)malloc(sizeof(int) * 10);
// printf("Size:%lu",sizeof(ptr));
// In the above case sizeof operater returns size of pointer only.
for(i=1;ptr && i<13 ;i++,ptr++)
{
printf("Size:%d %p\n",((int)sizeof(i))*i,ptr);
}
return 0;
}
выход:
Size:4 0x8ec010
Size:8 0x8ec014
Size:12 0x8ec018
Size:16 0x8ec01c
Size:20 0x8ec020
Size:24 0x8ec024
Size:28 0x8ec028
Size:32 0x8ec02c
Size:36 0x8ec030
Size:40 0x8ec034 //after this there is no indication that block ends.
Size:44 0x8ec038
Size:48 0x8ec03c
новый нет там c, использование malloc. – Gangadhar
'printf (" 10 ")' Кроме того, вам придется столкнуться с зависимой от платформы (читаемой: нестандартной) памятью apis, и даже те, кто скорее всего работают только с динамическими выделениями, такими как выделение. Если вы хотите портативность, вам придется управлять этим самостоятельно. – WhozCraig
'sizeof 'не может использоваться здесь, так как его вычисление происходит во время компиляции. он не знает о распределении времени выполнения. –