бугага. давно пора знать что char *str - это указатель. а указатель любого типа int char и тд всегда имеет размер 4 байт. физически указатель - это переменная, хранящая в своих 4 байтах адрес реального элемента в 32х разрядном адресном пространстве. (иа64 не трогаю пока =))
char *sPtr;
char sArray[] = "Hello";
sPtr = (char*)malloc(1024); // выделение 1024 байт и запись в sPtr адреса начала 1024 байтного блока в адресном пространстве.