| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1253 人关注过本帖
标题:关于指针的一个小问题(急!)
只看楼主 加入收藏
faminxmu
Rank: 3Rank: 3
来 自:厦门
等 级:论坛游侠
帖 子:191
专家分:106
注 册:2008-4-23
结帖率:70%
收藏
 问题点数:0 回复次数:14 
关于指针的一个小问题(急!)
在一个求平均植的二维数组
#include<stdio.h>
void main()
{
     void avearage(float *p,int n);
     float a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,2}};
     avearage(*a,12);
     system("pause");
}
void avearage(float *p,int n)
{
     float *pend;
     float sum=0,aver;
     pend=p+n-1;
     for(;p<=pend;p++)
     sum=sum+(*p);
     aver=sum/n;
     printf("aver=%f",aver);
     }
本人想问的是在调用函数的时候用avearage(*a,12);语句和用avearage(a,12);语句为什么结果是一样的?本人愚钝确实搞不懂还望高人指点一下.

[[it] 本帖最后由 faminxmu 于 2008-4-25 20:50 编辑 [/it]]
搜索更多相关主题的帖子: 指针 
2008-04-25 19:52
进步一点点
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2008-4-21
收藏
得分:0 
调用函数时,要标明自变量的类型,如果不标,系统默认类型为int型。应该时这个原因吧!!!
2008-04-25 20:00
Sun_DN
Rank: 1
来 自:NEU
等 级:新手上路
帖 子:48
专家分:0
注 册:2006-4-5
收藏
得分:0 
*a就是a【0】,都是指向第一个元素,因为*a代表a指向的元素
不能直接用a,这个是二维数组。
sj:函数声明在主函数前头

[[it] 本帖最后由 Sun_DN 于 2008-4-25 20:37 编辑 [/it]]

人不己知,而不愠,不亦君子乎?
2008-04-25 20:25
faminxmu
Rank: 3Rank: 3
来 自:厦门
等 级:论坛游侠
帖 子:191
专家分:106
注 册:2008-4-23
收藏
得分:0 
回复楼上俩
对于(调用函数时,要标明自变量的类型,如果不标,系统默认类型为int型。应该时这个原因吧!!!)貌似不太可能因为a已经是数组名,就算你说的默认是int型但我用avearage(a,12);运行后结果和avearage(*a,12);一样也就是说是正确的结果这个怎么解释呢?而对于(*a和a[0]都是指向第一个元素,不能直接用a,这个是二维数组。
sj:函数声明在主函数前头)这个我当然清楚但我确实用avearage(a,12);得到正确结果了我就是在这里想不通为什么会是占用的

在虚拟的世界中寻找目标。
2008-04-25 20:38
Sun_DN
Rank: 1
来 自:NEU
等 级:新手上路
帖 子:48
专家分:0
注 册:2006-4-5
收藏
得分:0 
这个就不清楚了,我用的dev-c++调了你的程序,avearage(a,12);不通,错误提示指针类型不匹配。所以我也不知道怎么你的会通过编译,爱莫能助

人不己知,而不愠,不亦君子乎?
2008-04-25 20:42
faminxmu
Rank: 3Rank: 3
来 自:厦门
等 级:论坛游侠
帖 子:191
专家分:106
注 册:2008-4-23
收藏
得分:0 
回复楼上的
刚才我在我的代码上少写了avearage(*a,12);现在补上了您测试一下
#include<stdio.h>
void main()
{
     void avearage(float *p,int n);
     float a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,2}};
     avearage(*a,12);/*把avearage(*a,12);换成avearage(a,12);再测试一下*/
     system("pause");
}
void avearage(float *p,int n)
{
     float *pend;
     float sum=0,aver;
     pend=p+n-1;
     for(;p<=pend;p++)
     sum=sum+(*p);
     aver=sum/n;
     printf("aver=%f",aver);
     }

在虚拟的世界中寻找目标。
2008-04-25 20:53
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
二维数组可以看成2级指针

学习需要安静。。海盗要重新来过。。
2008-04-25 20:57
Sun_DN
Rank: 1
来 自:NEU
等 级:新手上路
帖 子:48
专家分:0
注 册:2006-4-5
收藏
得分:0 
我就是加上了这个测试的,结果正确
再次建议把函数声明放在主函数前面,别习惯了不好^_^
用后一个的话,错误提示如下
7 D:\my c\Q-04-25-2.cpp cannot convert `float (*)[4]' to `float*' for argument `1' to `void avearage(float*, int)'

人不己知,而不愠,不亦君子乎?
2008-04-25 21:01
faminxmu
Rank: 3Rank: 3
来 自:厦门
等 级:论坛游侠
帖 子:191
专家分:106
注 册:2008-4-23
收藏
得分:0 
回复楼上的
听您说会出现编译错误我从新又编译了一次没有发现任何错误,对于您说:“再次建议把函数声明放在主函数前面,别习惯了不好^_^”,我想说的是我这个题目是从老潭的书抄过来的,难道这个习惯真的不好吗?按您所说的将函数声明放在主函数前面那您要是调用到其他的文件时那不乱套了??

在虚拟的世界中寻找目标。
2008-04-25 21:14
Sun_DN
Rank: 1
来 自:NEU
等 级:新手上路
帖 子:48
专家分:0
注 册:2006-4-5
收藏
得分:0 
挺奇怪。可能是我的编译器有问题吧。函数声明不是一定要放前面,我的一个建议而已。

人不己知,而不愠,不亦君子乎?
2008-04-25 21:25
快速回复:关于指针的一个小问题(急!)
数据加载中...
 
   



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

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