C语言中关于指针的问题。请大神帮忙。困扰中
#include<stdio.h>voidmain(){voidaverage(float*p,intn);voidsearch(float(*p)[4],intn);f...
#include<stdio.h>
void main()
{
void 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}};
average(*score,12);
search(score,2);
}
void average(float *p,int n)
{
float *p_end;
float sum=0,aver;
p_end=p+n-1;
for(;p<=p_end;p++)
sum=sum+(*p);
aver=sum/n;
printf("%5.2f",aver);
printf("\n");
}
void search(float (*p)[4], int n)
{
int i;
for(i=0;i<4;i++)
{
printf("%5.1f",*(*(p+n)+i));
printf("\n");
}
}
1.为什么主函数中的average(*score,12)不能写成average(score,12)?
2.在定义第一个函数时,为什么其中的for循环不能写成for(;p<=p+11;p++),不定义指针变量p_end,直接for(;p<=p+11;p++)为什么不行啊?困扰了好久,请大神帮忙
注:第一个函数是求平均值。
第二个函数是输出第n个学生的成绩。 展开
void main()
{
void 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}};
average(*score,12);
search(score,2);
}
void average(float *p,int n)
{
float *p_end;
float sum=0,aver;
p_end=p+n-1;
for(;p<=p_end;p++)
sum=sum+(*p);
aver=sum/n;
printf("%5.2f",aver);
printf("\n");
}
void search(float (*p)[4], int n)
{
int i;
for(i=0;i<4;i++)
{
printf("%5.1f",*(*(p+n)+i));
printf("\n");
}
}
1.为什么主函数中的average(*score,12)不能写成average(score,12)?
2.在定义第一个函数时,为什么其中的for循环不能写成for(;p<=p+11;p++),不定义指针变量p_end,直接for(;p<=p+11;p++)为什么不行啊?困扰了好久,请大神帮忙
注:第一个函数是求平均值。
第二个函数是输出第n个学生的成绩。 展开
4个回答
展开全部
1.
void average(float *p,int n);
这个的第一个参数是个一维指针
float score[3][4] 这是两个维度
average(score,12) 中是把一个2维的赋给一个一维指针 它消化不了啊。。。。
*score 其实就等于把 score[0] 给过去了 这才是一个维度
2.
for(;p<=p+11;p++)
你的P的值一直在变啊
p<=p+11 前面的P变大了 后面的P也++了啊 你永远也追不上啊
就像 年龄比你大11岁的人 不是你11年后就跟他一个岁数了。。。
void average(float *p,int n);
这个的第一个参数是个一维指针
float score[3][4] 这是两个维度
average(score,12) 中是把一个2维的赋给一个一维指针 它消化不了啊。。。。
*score 其实就等于把 score[0] 给过去了 这才是一个维度
2.
for(;p<=p+11;p++)
你的P的值一直在变啊
p<=p+11 前面的P变大了 后面的P也++了啊 你永远也追不上啊
就像 年龄比你大11岁的人 不是你11年后就跟他一个岁数了。。。
展开全部
1.score是行指针。*score就变成列指针。void average(float *p,int n);要求的参数是float *p,,而float score[3][4]就相当于中的数组名score就相当于双重指针,*score和float *p,才是相称的。
2.p是变量。p++时p是不断变化的。
2.p是变量。p++时p是不断变化的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.为什么主函数中的average(*score,12)不能写成average(score,12)?
因为average定义的时候要求是指向浮点数的指针,score 是指向二维数组第一个数组首地址的指针,所以不能写成average(score,12)。
2.在定义第一个函数时,为什么其中的for循环不能写成for(;p<=p+11;p++),不定义指针变量p_end,直接for(;p<=p+11;p++)为什么不行啊?困扰了好久,请大神帮忙
注:第一个函数是求平均值。
第二个函数是输出第n个学生的成绩。
for(;p<=p+11;p++)
p一直在进行自增运算 他就会一直小于p+11 ,p<=p+11永远都成立,就是无限循环了。
因为average定义的时候要求是指向浮点数的指针,score 是指向二维数组第一个数组首地址的指针,所以不能写成average(score,12)。
2.在定义第一个函数时,为什么其中的for循环不能写成for(;p<=p+11;p++),不定义指针变量p_end,直接for(;p<=p+11;p++)为什么不行啊?困扰了好久,请大神帮忙
注:第一个函数是求平均值。
第二个函数是输出第n个学生的成绩。
for(;p<=p+11;p++)
p一直在进行自增运算 他就会一直小于p+11 ,p<=p+11永远都成立,就是无限循环了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.
average函数的原型为
void average(float *p,int n);
所以要求调用语句对应于p的实参为float *类型,而score的类型为float (*p)[4],类型不一致。
2. 如果写成 for(;p<=p+11;p++),则“水抬船高”,永远无法结束(p<=p+11永远成立)。
average函数的原型为
void average(float *p,int n);
所以要求调用语句对应于p的实参为float *类型,而score的类型为float (*p)[4],类型不一致。
2. 如果写成 for(;p<=p+11;p++),则“水抬船高”,永远无法结束(p<=p+11永远成立)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询