死循环怎么居然能正确输出
编号:QA001605
建立日期: 1999年8月26日 最后修改日期:1999年8月26日
所属类别:
阿庆:
我有一条令人觉得可怕的C程序要请教你一下。
编写一个函数print,在主函数输入数据,在print函数输出。
struct student
{int num;
char name[8];
int score[3];
};
print(struct student *p)
{struct student *q=p;
int c;
printf("\nnum name 语文 数学 英语\n");
for(;p<=p+3;p++) /*请注意这句*/
printf("%-5d%-8s%-5d%-5d%-5d\n",p->num,p->name,p->score[0],p->score[1],p->score[2]);
}
main()
{struct student stu[5];
struct student *p;
int i;
printf("请输入学生数据:");
printf("\nnum name 语文 数学 英语\n");
for(i=0;i<=4;i++)
scanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].s
core[2]);
p=stu;
print(p);
}
上面有注释的那一句循环本来应该是死循环,但在turboc2.0上运行后居然能正确输出,这是什么道理。
回答:
按道理你的程序是错误的,但之所以可以运行跟TC的内存分配有关。因为TC从内存段的高端开始分配变量,所以stu[5]分配在段的高端。随着指针p的增加,p逐渐达到段的边缘,一旦p+3超过了段的64K限制,这样p for(;p<=p+3;p++) /*请注意这句*/
{
printf("%p, %p\n", p, p+ 3); printf("%-5d%-8s%-5d%-5d%-5d\n",p->num,p->name,p->score[0],p->score[1],p->score[2]);
}
printf("%p, %p\n", p, p+ 3);
}
此问题由李海回答。
| |
|
|
| |
|
|