题一:你选的是A,正确答案是D,那么要弄明白的是float *p的含义,记住,在声明指针的时候,前面的那个* 表示的是我这里声明了一个变量p,这个变量是一个指针,并不是取指针指向值的意思。所以,对于A答案,float *p = 1024,既然p是一个指针,那么给它初始化1024是不对的,它需要的是一个地址值。如果是 float *p; *p = 1024的就靠谱了,因为后一个p的前面的*表示的是取指针指向的值。现在能理解为什么D是对的了吧?
题二:scanf的第二个参数需要的是你要输入的数的地址,如果写成scanf("%lf",&a)应该知道吧,p = &a替换了一下就行了,所以D是正确的。
指针声明并赋值: float *p=&x ; (此处 * 是声明,并不是访问它指向的值)
或者先声明:float *p ; 再赋值 p=&x ; (&是取地址符号,所以p与&x是等价的)
因此, A选项,由于*用在了声明中,所以意味着它与地址是等价的 B存在类型错误 C缺
少*号
2. 首先c语言中
%f 对应 float
%lf 对应 double,所以B排除;
由于看不清题目问的什么所以这么说吧: scanf是等待输入功能与printf相对应, 而scanf第二个参数需要的是地址 类型的数据, 如果int a; 则 scanf(%d,&a); 少了&会报错; 如果int *p; 并且 p=&a; 则 可以:scanf(%d,&a) 也可以scanf(%d,p) ; 因为p和&a都是地址;
PS:如果是printf 的话,那么想输出数值就是printf(%d,*p) 或者printf(%d,a);
想输出地址,则可以:printf(%s,p)