| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1253 人关注过本帖
标题:关于指针的一个小问题(急!)
只看楼主 加入收藏
zhaoyg
Rank: 1
等 级:新手上路
帖 子:328
专家分:0
注 册:2006-8-28
收藏
得分:0 
既然原型为avearage(float *p,int n);那么怎么能avearage(a,12)呢,最起码也得将a转为一级指针才能通过编译呀

麻雀飞上枝头变凤凰,而菜鸟的我飞上枝头却感冒了,为什么我的脑袋如此的不管用呢。
2008-04-25 21:30
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
我想是这样的
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    指针传递的是地址,数组传递的也是地址。当你用*a时,是把数组首地址中的数据传给了函数的*p,当然,*p也接收了a数组的首地址。当你用a时,是把数组a[0][0]的地址传给了指针。

    所以,它们的实际作用是一样的,所以结果是一样的。

    也不知道说得对不对,一家之言,才疏学浅,还望大家纠正错误。
2008-04-25 22:25
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
[bo]以下是引用 [un]广陵绝唱[/un] 在 2008-4-25 22:25 的发言:[/bo]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    当你用*a时,是把数组首地址中的数据传给了函数的*p

广陵这句话错了
多的我不说了,试试下面的程序,相信你会明白的
#include "stdio.h"

int main()
{
    int a[3][4];
    printf("*a means %#x\n",*a);
    printf("a means %#x\n",a);
    printf("*a+1 means %#x\n",*a+1);
    printf("*(a+1) means %#x\n",*(a+1));
    printf("a+1 means %#x\n",a+1);
}

[[it] 本帖最后由 moonwalker 于 2008-4-25 22:48 编辑 [/it]]

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2008-04-25 22:44
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
[bo]以下是引用 [un]zhaoyg[/un] 在 2008-4-25 21:30 的发言:[/bo]

既然原型为avearage(float *p,int n);那么怎么能avearage(a,12)呢,最起码也得将a转为一级指针才能通过编译呀

a已经是指针了
还有不要过多考虑几级指针,会让你混乱
任何类型的指针都只是一个指针
区别的只是指针指向什么东西?
指向数还是指向一个地址

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2008-04-25 22:56
nobush
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-1-10
收藏
得分:0 
二维数组 a 和 *a a[0] 地址相同
用这个可以验证 printf("a is %d, *a is %d, a[0] is %d",&a,&*a,a[0]);

把avearage(*a,12);换成avearage(a,12) 编译器会报警。但结果正确,
因为avearage函数的算法实际上做的是一维数组,算你走运!
但不要因此认为任意场合都可以这样~
另:函数声明放在调用前就可以了。
2008-04-25 23:06
快速回复:关于指针的一个小问题(急!)
数据加载中...
 
   



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

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