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);

}

}

请大家帮我解释下,谢!

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);

}

}
因为上面也不见得会带来什么性能提升!
下面函数类似!