| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 532 人关注过本帖
标题:关于指针转换的一个问题
只看楼主 加入收藏
xiayy860612
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-5-8
收藏
 问题点数:0 回复次数:4 
关于指针转换的一个问题
void average(float *p,int n)
{
float *p_end,sum=0,aver;
p_end=p+n;
for(;p<p_end;p++)
sum=sum+*p;
aver=sum/n;
printf("%5.2f\n",aver);
}
void search(float (*p)[4],int n)
{
int i;
printf("NO.%d",n);
for(i=0;i<4;i++)
printf("%5.2f",*(*(p+n)+i));
}
main()
{
float score[3][4]={{65,67,79,60},{80,87,90,81},{90,99,100,98}};
average(*score,12);//为什么这里的score前可以加*,这里的score明明不是指针变量啊,难道在数组名前加*可以表示数组首地址?
search(score,2);//这里为什么是score表示,而不是*score表示啊???用*score表示会出现可疑指针转换的问题

}
请各位大虾帮帮我
搜索更多相关主题的帖子: 指针 
2008-03-19 22:33
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
average(*score,12); /* 一个星代表传递二维数组中的一维的四个原素,两个星代表传递二维中一维的特定原素如:*score={65,67,79,60},**score={65}*/
search(score,2);/*这是传递的是整个数组,接收函数把它当做整个的一维数组来对待,接收的是score[1][0]的值,也就是第5个值.
2008-03-19 23:12
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
兄弟帮你顶一下..很受教育了..以前没太在意二维的传递问题

学习需要安静。。海盗要重新来过。。
2008-03-19 23:19
wolfs
Rank: 1
来 自:成都
等 级:新手上路
帖 子:32
专家分:0
注 册:2008-3-15
收藏
得分:0 
声明 数组 实际上是声明一个指针,注意是数组,但是数组的起始地址是不变的,也就是不能把另一个地址放到它里面

[[it] 本帖最后由 wolfs 于 2008-3-20 09:59 编辑 [/it]]

哎...我这扶不上墙的泥啊,只有自己爬上去了!
2008-03-20 09:57
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
[bo]以下是引用 [un]wolfs[/un] 在 2008-3-20 09:57 的发言:[/bo]

声明 数组 实际上是声明一个指针,注意是数组,但是数组的起始地址是不变的,也就是不能把另一个地址放到它里面

我觉得楼上说的有错.
声明恰恰是数组与指针的最大不同.
在别的地方,数组用法都可以改为指针,但声明不可以
比如
int a[10];
可以写成int *(a+10)么?
显然不可以。
这个错误一般人都会注意。
但是,如果在别的文件里要引用一个已经定义的数组呢??
比如文件a中有,int a[10];
在文件b中钥使用这个数组,必须是是先用 extern int a[10];
而用extern int *a;就会发生错误。
详情可参看c专家编程第4章,--- 一个惊人的事实,数组和指针并不相同

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-03-20 10:37
快速回复:关于指针转换的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028575 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved