测试2.exe 中的 0x77c615ee 处有未经处理的异常: 0xC0000005: 读取位置 0x00450000 时发生访问冲突

visual studio中的问题
下面是我的代码
#include<stdio.h>
void main()
{
float a;
float average(float *p,int n);
void search(float(*p)[4],int n);
float score[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};
a=average(*score,12);//element pointer
printf("aver=%d",a);
search(score,2);//line pointer
}
float average(float *p,int n)
{
float sum=0,aver;
for(;p<=p+n-1;p++)
sum=sum+(*p);
aver=sum/n;
return aver;
}

void search(float(*p)[4],int n)
{
int i;
printf("the score of No.%d are:\n",n);
for(i=0;i<4;i++)
printf("%5.2f",*(*(p+n)+i));
printf("\n");
}

输出浮点数要用%f
average函数中这段要改
for(float *t=p;t<=p+n-1;t++)
sum=sum+(*t);
不然你的p肯定是永远小于p+n-1的,会死循环的。

#include<stdio.h>
void main()
{
float a;
float average(float *p,int n);
void search(float(*p)[4],int n);
float score[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};
a=average(*score,12);//element pointer
printf("aver=%f",a);
search(score,2);//line pointer
}
float average(float *p,int n)
{
float sum=0,aver;
for(float *t=p;t<=p+n-1;t++)
sum=sum+(*t);
aver=sum/n;
return aver;
}

void search(float(*p)[4],int n)
{
int i;
printf("the score of No.%d are:\n",n);
for(i=0;i<4;i++)
printf("%5.2f",*(*(p+n)+i));
printf("\n");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-09
你的search函数里面的数组指针已经写对了,为什么不在average里面同样的写呢?
这么改:
#include<stdio.h>
void main()
{
float a;
float average(float(*p)[4],int n);
void search(float(*p)[4],int n);
float score[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};
a=average(score,12);//element pointer
printf("aver=%d",a);
search(score,2);//line pointer
}
float average(float(*p)[4],int n)
{
float sum=0,aver;
int i;
for(i=0;i<=n-1;i++)
sum=sum+(*(*(p+n)+i));
aver=sum/n;
return aver;
}

void search(float(*p)[4],int n)
{
int i;
printf("the score of No.%d are:\n",n);
for(i=0;i<4;i++)
printf("%5.2f",*(*(p+n)+i));
printf("\n");
}
相似回答