----------------解决方案--------------------------------------------------------
我想是这样的
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~指针传递的是地址,数组传递的也是地址。当你用*a时,是把数组首地址中的数据传给了函数的*p,当然,*p也接收了a数组的首地址。当你用a时,是把数组a[0][0]的地址传给了指针。
所以,它们的实际作用是一样的,所以结果是一样的。
也不知道说得对不对,一家之言,才疏学浅,还望大家纠正错误。
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]广陵绝唱[/un] 在 2008-4-25 22:25 的发言:[/bo]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
当你用*a时,是把数组首地址中的数据传给了函数的*p
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
当你用*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]]
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]zhaoyg[/un] 在 2008-4-25 21:30 的发言:[/bo]
既然原型为avearage(float *p,int n);那么怎么能avearage(a,12)呢,最起码也得将a转为一级指针才能通过编译呀
既然原型为avearage(float *p,int n);那么怎么能avearage(a,12)呢,最起码也得将a转为一级指针才能通过编译呀
a已经是指针了
还有不要过多考虑几级指针,会让你混乱
任何类型的指针都只是一个指针
区别的只是指针指向什么东西?
指向数还是指向一个地址
----------------解决方案--------------------------------------------------------
二维数组 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函数的算法实际上做的是一维数组,算你走运!
但不要因此认为任意场合都可以这样~
另:函数声明放在调用前就可以了。
----------------解决方案--------------------------------------------------------