sizeOf(*p)
Это вычисляет размер типа по адресу, который хранится в значении p
... т.е. указатель на uint8_t.
sizeOf(*p[0])
Это размер типа по адресу, который хранится в значении нулевого элемента массива, который начинается с адреса, хранящегося в значении p
.
uint8_t *p[2]={&var1,&var2};
Это объявляет, что значение p
является адресом первого объекта в массиве указателей на uint8_t.
Это НЕ разыменование p
. Ни *, ни [] не имеют такого значения для lvalues.
Семантика оператора разыменования имеет больше смысла, если вместо того, чтобы рассматривать его как команду, вы воспринимаете его как математический термин, с которым вы делаете алгебру с ...
"√ 2" : "the square root of 2"
" *p" : "the dereference of p"
...
"x = *p" : "set the value of x to the dereference of p"
"int *p" : "has type int: the dereference of p"