Denke nicht. *TestData gilt nur (und hat Sinn), wenn TestData ein pointer wäre.

Das Beispiel mit dem "&" wirkt imho verwirrender, als die Sache ist, weil "TestData" als Array definiert ist.

Anschaulicher und verständlicher wäre es, "TestData" sozusagen als normale Variable zu definieren,
Code:
unsigned char   TestData;
void*  n;
 
     n = (void*) TestData               // inhalt Testdata
     n = (void*) &TestData             // adresse  TestData
wobei das herum-Casten mit verschiedenen Pointer-type aus der ob. Liste wiederum wirkungslos ist´, wenn "n" ein void-pointer ist. Damit fängt der Compiler im Moment nix an.

Das casten von "n" kriegt Sinn und ist notwendig, wenn ich danach mit "n" irgendwelche operationen ausführen will, also z.B, inkrementieren von "n" selbst oder eben das, wo er hinzeigt.