c一程序错误哪里

来源:百度知道 编辑:UC知道 时间:2024/07/02 14:11:34
找出四人中年龄最大的并输出
#include<stdio.h>
void main()
{
struct man
{
char name[20];
int age;
} person[4]={"Li",18,"Wang",80,"Zhang",56,"Sun",78};
int m=0;
struct man *p,*max;
for(p=person;p<p+4;p++)
{
if(p->age>m)
{m=p->age;max=p;}
}
printf("%s %d",max->name,max->age);
}
运行通过 但是出现图片中错误 出不来正确结果 为什么 是溢出吗 哪里啊 老是遇到这样的问题

当然会出错了

错误在这里:for(p=person;p<p+4;p++)
1、p+4不存在,即p+4指向未知区域,这是系统不允许的
2、即是系统允许,这也是错的,因为p是要每次加一得,导致的结果是p+4也每次加一,所以是死循环!

出现的那个图片就是提示第一个错误
#include<stdio.h>
void main()
{
struct man
{
char name[20];
int age;
} person[4]={"Li",18,"Wang",80,"Zhang",56,"Sun",78};
int m=0;
struct man *p,*max,*q;
for(q=p=person;p<q+4;p++)
{
if(p->age>m)
{m=p->age;max=p;}
}
printf("%s %d",max->name,max->age);
}
这样就不错了

这样就行了,顺便改了下编程规范。
#include <stdio.h>

struct man
{
char name[20];
int age;
}person[4] = {{"Li", 18}, {"Wang", 80}, {"Zhang", 56}, {"Sun", 78}};

void main()
{
int m = 0, i;
struct man *p, *max;