//申明了一个指针类型P和双精度类型的a变量
double *P, a;
//因为P是指针,只存放一个地址值。下面的语句是把变量a的地址赋值给指针。
p=&a;
//*p = &a; 赋值语句是错的,因为 *p 是一个 取 指针所指向地址的值。而不是地址。而&a是 取变量a的地址。故赋值错误。
scanf("%lf", p);
/*因为是double双精度的,所以格式是%lf, scanf是把输入的值存放到一个变量的地址里面,而指针P是一个存放地址的值。故只能这样写。 */
综上所述,答案D 是正确的。
选择A错在前面的赋值语句。
选项B错在%lf长双精度格式。
选项C错在scanf语句里面的*p。