指针赋值问题?
#include"stdio.h"void main()
{
int a[10],i,*p,*sum,m;
float *ave,n;
m=0;n=0;
sum=&m;
ave=&n;
p=&a[0];
for(i=0;i<10;i++)
{
*(p+i)=i;
*sum=*sum+*(p+i);
}
*ave=*sum/10;
printf("%d %f",*sum,*ave);
putchar('\n');
for(i=0;i<10;i++)
printf("a[%d]=%d\n",i,*(p+i));
}――――――――――――――――――――――――――――――――――――――
请问:为什么 *(p+i)=i; 可以直接用 而 sum=&m,ave=&n;不可以改成 *sum=m,*ave=n;
改成那样,可以得出结果,但是有 8个 warning
[[it] 本帖最后由 crabeam 于 2008-6-19 17:48 编辑 [/it]]
----------------解决方案--------------------------------------------------------
是不是太简单 没人愿意回答
----------------解决方案--------------------------------------------------------
回去好好复习下书....
----------------解决方案--------------------------------------------------------
同意3楼
[flash=400,300]http://yzfy.byethost17.com/flash.php[/flash][color=white]
----------------解决方案--------------------------------------------------------
同意4楼
----------------解决方案--------------------------------------------------------
指针使用前就得初始化,不然指向的地址是未知的。
1;sum=&m,ave=&n 是隐式初始化,使指针指向某个地址,是正确使用;
2;而*sum=m,*ave=n是使用指针,是给指针指向的内容赋值,在你这段代码里,sum和ave是初次使用,之前需要初始化。
当然两种表达结果是一样的,但意义不同,严格讲后面是错误;
如果你在语句*sum=m;*ave=n;之前加上sum=NULL;ave=NULL;必然就不会有警告了。
----------------解决方案--------------------------------------------------------
必然不会有警告。。。不过。。。哎。。。运行一下看看吧
[flash=400,300]http://yzfy.byethost17.com/flash.php[/flash][color=white]
----------------解决方案--------------------------------------------------------
谢谢,说得很好
理解了。 嗯,“之前加上sum=NULL;ave=NULL;” 如6楼所说 没了警告。加上后,不能输出 求和 平均值还是正确.
[[it] 本帖最后由 crabeam 于 2008-6-19 19:00 编辑 [/it]]
----------------解决方案--------------------------------------------------------
楼主你加上以后运行过了吗?
[flash=400,300]http://yzfy.byethost17.com/flash.php[/flash][color=white]
----------------解决方案--------------------------------------------------------
回复 9# 爱喝牛奶的猫咪 的帖子
结果不正确....[[it] 本帖最后由 crabeam 于 2008-6-19 18:56 编辑 [/it]]
----------------解决方案--------------------------------------------------------