如下两个代码,第一个代码会停止运行,而第二个能得出正确结果。。。这两个代码的不同之处不应该是等价的吗?为什么会造成这种完全相反的结果?
#include<stdio.h>
void main()
{
void ave(float *p,int m);
float a[3][4]={{65,66,67,68},{78,79,80,71},{54,78,65,54}};
ave(*a,12);
}
void ave(float *p,int m)
{
float aver=0;
for(;p<(p+m);p++) //与下一个代码的不同之处
aver=aver+(*p);
aver=aver/m;
printf("平均分为:%4.2f\n",aver);
}
#include<stdio.h>
void main()
{
void ave(float *p,int m);
float a[3][4]={{65,66,67,68},{78,79,80,71},{54,78,65,54}};
ave(*a,12);
}
void ave(float *p,int m)
{
float aver=0;
float *end=p+m; //与上个代码的不同之处
for(;p<end;p++)
aver=aver+(*p);
aver=aver/m;
printf("平均分为:%4.2f\n",aver);
}
p<(p+m)
可是p每次都在变,所以这个条件每次都不一样
#include<stdio.h>
void main()
{
void ave(float *p,int m);
float a[3][4]={{65,66,67,68},{78,79,80,71},{54,78,65,54}};
ave(*a,12);
}
void ave(float *p,int m)
{
float aver=0;
float *q=p;
for(;p<(q+m);p++) //与下一个代码的不同之处
aver=aver+(*p);
aver=aver/m;
printf("平均分为:%4.2f\n",aver);
}
难道是因为第一个传进来的数组名是一个常量指针,不能做++等改变位置的操作
(p+m)这个p只是指向二维数组里边的一维数组的首地址,p+1,第一次指向65,p再+1应该是指向78
二维数组至少得俩for循环使用
#if 1
#include
void main()
{
void ave(float *p, int m);
float a[3][4] = { { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 } };
ave(*a, 12);
}
void ave(float *p, int m)
{
float aver = 0;
//float *end = p + m; //与上个代码的不同之处
for (; p<(p+m); p++) //这种情况你的p指针后移,p+m指针也跟着后移,永远追不上,导致死循环,
aver = aver + (*p);
aver = aver / m;
printf("平均分为:%4.2f\n", aver);
}
#endif