C语言结构体数据类型问题,请会的进来帮帮忙
来源:百度知道 编辑:UC知道 时间:2024/05/29 06:12:55
#include "stdio.h"
#include "conio.h"
struct man
{
char name[20];
unsigned age;
char sex[7];
}
main()
{
struct man person[5];
data_in(person,5);
data_out(person,5);
getch();
}
data_in(struct man *p,int n)
{
struct man *q=p+n;/*这里为什么不能改成*q=n*/
for(;p<q;p++)
{
printf("age:sex:name");
scanf("%u%s",&p->age,p->sex);
gets(p->name);
}
}
data_out(struct man *p,int n)
{
struct man *q=p+n;/*这里为什么不能改成*q=n*/
for(;p<q;p++)
{
printf("%s%u%s\n",p->name,p->age,p->sex);
}
}
请大家帮我解释下,谢!
#include "conio.h"
struct man
{
char name[20];
unsigned age;
char sex[7];
}
main()
{
struct man person[5];
data_in(person,5);
data_out(person,5);
getch();
}
data_in(struct man *p,int n)
{
struct man *q=p+n;/*这里为什么不能改成*q=n*/
for(;p<q;p++)
{
printf("age:sex:name");
scanf("%u%s",&p->age,p->sex);
gets(p->name);
}
}
data_out(struct man *p,int n)
{
struct man *q=p+n;/*这里为什么不能改成*q=n*/
for(;p<q;p++)
{
printf("%s%u%s\n",p->name,p->age,p->sex);
}
}
请大家帮我解释下,谢!
data_in(struct man *p,int n)
{
struct man *q=p+n;/*这里为什么不能改成*q=n*/
/*
*q定义最后一个元素之后的内存位置,这是一种技巧
但是可能会带来问题, 如:该内存位置超出的变量范围,
操作系统可能会报错。不过一般来说不对这个地址进行任何
内存读写活动,一般不会出问题
*/
for(;p<q;p++)
{
printf("age:sex:name");
scanf("%u%s",&p->age,p->sex);
gets(p->name);
}
}
最好改为:
data_in(struct man *p,int n)
{
int i;
for(i = 0;i < n;i++, p++)
{
printf("age:sex:name");
scanf("%u%s",&p->age,p->sex);
gets(p->name);
}
}
因为上面也不见得会带来什么性能提升!
下面函数类似!