C语言指针初学者 想问几个问题

#include<stdio.h>
main()
{ float a=0,b=6.0,*p;
p=&a;
printf("Input data:");
scanf("%f",p);
*p+=2;
printf("%f",*p);
}

请看这个程序 我想问几个问题
1.为什么sanf语句中是p 而不是*p ??
2.因为*p; p=&a;可以写成 *p=&a ;为什么printf("%f",*p);里 逗号后面是*p?而不是 &a 或 p???

第1个回答  2009-02-02
scanf函数要求输入的是地址..
上面已经声明 float *p;就是p已经是代码地址了.
所以直接传入p
//p=&a;可以写成 *p=&a
a是一个数值,p是代表地址,,&a代表的代表a数据的地址
只有地址才能辅助给地址..
所以 p=&a

*p = &a是不对的.
*p 已经代表数值了.不是地址,,但是 &a是地址..所以不行

printf("%f"),后面要求传入的是数值,不是地址,,所以要用*p还不是p
否则就会变成打印a的地址,而不是a的数值了.
第2个回答  2009-02-02
scanf接受的是指针,用来修改被指向的内容。这里p是指向变量a的指针,*p就是变量a了。

p=&a不可以写成*p = &a。那个float *p = &a;只能说C/C++类型书写格式比较恶心。那个*是和float连在一起表示float*类型。结果上,*p这里等同于a。p等同于&a。
第3个回答  2009-02-02
1。scanf 语句中的的是地址 *p是变量 p是地址
2. *p=&a是一种简写 printf("%f",*p)中要输出的是变量而不是地址
*p是变量 &a和p都是地址本回答被提问者采纳
相似回答