当前位置: 代码迷 >> C语言 >> 关于指针转换的一个问题
  详细解决方案

关于指针转换的一个问题

热度:118   发布时间:2008-03-19 22:33:09.0
关于指针转换的一个问题
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表示会出现可疑指针转换的问题

}
请各位大虾帮帮我
搜索更多相关的解决方案: 指针  

----------------解决方案--------------------------------------------------------
average(*score,12); /* 一个星代表传递二维数组中的一维的四个原素,两个星代表传递二维中一维的特定原素如:*score={65,67,79,60},**score={65}*/
search(score,2);/*这是传递的是整个数组,接收函数把它当做整个的一维数组来对待,接收的是score[1][0]的值,也就是第5个值.
----------------解决方案--------------------------------------------------------
兄弟帮你顶一下..很受教育了..以前没太在意二维的传递问题
----------------解决方案--------------------------------------------------------
声明 数组 实际上是声明一个指针,注意是数组,但是数组的起始地址是不变的,也就是不能把另一个地址放到它里面

[[it] 本帖最后由 wolfs 于 2008-3-20 09:59 编辑 [/it]]
----------------解决方案--------------------------------------------------------
[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章,--- 一个惊人的事实,数组和指针并不相同
----------------解决方案--------------------------------------------------------
  相关解决方案