The compiler is expecting a constant because you're declaring and initializing point1 in the same statement. You could either declare the structure in one statement and explicitly initialize each field in subsequent statements (see point2 below), or you could declare and initialize it in one statement, initializing pdata to an arbitrary pointer value, and then update pdata in the next statement (see point1 below).
main()
{
char bitBucket[80];
struct data first = {400.25, 25, "GM1"};
struct data next1 = {450.00, 10, "GM2"};
// declare and initialize point1 in the same statement.
// pdata (initialized to 0) must be updated before use!
struct x point1 = {2003, "TestFile1", 0};
struct x point2;
// update pdata to point t
o first
point1.pdata = &first;
// initialize each field of point2
point2.year = 2003;
strcpy(point2.fname, "TestFile2");
point2.pdata = &next1;
printf("File: %s\nYear: %d\nFrequency: %f\nPower %d\n",
point1.fname, point1.year,
point1.pdata->freq, point1.pdata->pwrlevel);
printf("File: %s\nYear: %d\nFrequency: %f\nPower %d\n",
point2.fname, point2.year,
point2.pdata->freq, point2.pdata->pwrlevel);
printf("Press Enter to continue: ");
gets(bitBucket);
}