问各位一个问题,指针p,for循环里为何p

一墨千里无色 2017-11-30 04:58:18
比如说我写一个程序:
#include<stdio.h>
int main()
{//三个学生,各学四门课,计算总平均成绩以及第n学生成绩
void average(float *p, int n);
void search(float(*p)[4], int n);
float a[3][4] = { { 65,67,70,60 },{ 80,87,90,81 },{ 90,99,100,98 } };
average(*a, 12);
search(a, 2);
return 0;
}
void average(float *p, int n)
{
float sum = 0.0, aver;
for (; p <= (p + n - 1); p++)
sum = sum + *(p);
aver = sum / n;
printf("%f\n", aver);
}
void search(float(*p)[4], int n)
{
int i = 0;
for (i = 0; i <= 3; i++)
printf("%f\t", *(*(p + n) + i));
}

没有报错,但是不能运行;
如果把average里面:
for (; p <= (p + n - 1); p++)
改成:

float *pend;
pend=p+n-1;
for (; p <= pend; p++);

它就完美运行了。。

所以,这到底是为啥呢为啥呢
...全文
281 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yx777777 2017-11-30
  • 打赏
  • 举报
回复
p<=p+n-1的值永远为true,当然不进入死循环,也就是你说的不能运行,其实是一直在循环里面运行,只不过你感觉不到
赵4老师 2017-11-30
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
大米粥哥哥 2017-11-30
  • 打赏
  • 举报
回复
判断条件不同 pend是定值 p+n-1 会一直变化 不懂调试一下看看值就可以了
FoolCarpe 2017-11-30
  • 打赏
  • 举报
回复
for (; p <= (p + n - 1); p++) p一直在加1,每次for循环中判断语句p <= (p+n-1)的 p+n-1计算的值也是一直在变
paschen 2017-11-30
  • 打赏
  • 举报
回复
你每次循环完p都会递加,p<p+n将不会得到满足,你可以用一个变量在循环前记录p+n的值,之后循环中判断p是否小于这个变量
自信男孩 2017-11-30
  • 打赏
  • 举报
回复
#include<stdio.h>

void average(float *p, int n);
void search(float(*p)[4], int n);

int main()
{   //三个学生,各学四门课,计算总平均成绩以及第n学生成绩
    float a[3][4] = { { 65,67,70,60 },{ 80,87,90,81 },{ 90,99,100,98 } };
    float *arr = &a[0][0];
    average(arr, 12);
    search(a, 2);
    return 0;
}
void average(float *p, int n)
{
    float sum = 0.0, aver;
    float *end = p + n;
    for (; p < end; p++)
        sum = sum + *(p);
    aver = sum / n;
    printf("%f\n", aver);
}


void search(float (*p)[4], int n)
{
    int i = 0;
    for (i = 0; i <= 3; i++)
        printf("%f\t", *(*(p + n) + i));
}
参考一下吧;
for (; p <= (p + n - 1); p++)
注意看一下p <= (p+n -1); 如果p++,那么<=两边的p是不是都变化了,这样岂不是就是无限循环了?无限循环就会越界,出现段错误;

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧