荣之联最有可能收购:关于C语言的结构体 高手请进

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 12:56:03
例如结构体定义如下:
struct student{

char name;
int number;
struct student *next;
}
以上定义了学生的信息;
我想用从键盘输入的形式,来增加学生的性别,年龄等信息;
请问:可以这样实现吗,怎么样实现?
很谢谢foraics认真解释

一定要使用 student->next这个结构指针,而且要求不破坏student这个结构的定义吗?这样子如果再想加入性别年龄这种数据,恐怕比较不合适,而且程序看起来也不清晰

一定要的话也可以,定义一个新结构,比如名为detail,detail的第一项是struct student,这样这个第一项的地址实际上和这个struct detail的地址相等,也就是student的next指针和包含这个student结构的detail结构的next指针相等(下面的例子说明了这一点),但是在引用结构指针的时候一定要记住强制类型转换。

#include<stdio.h>

#define MALE 0;
#define FEMALE 1;

struct student
{
char name;
int number;
struct student *next;
};

struct detail
{
struct student lpBasicInformation;
int sex;
int age;
struct detail *next;
};

int main(void)
{

struct detail student1,student2;

student1.lpBasicInformation.name='A';
student1.lpBasicInformation.number=1;
student1.age=18;
student1.sex=MALE;

student2.lpBasicInformation.name='B';
student2.lpBasicInformation.number=2;
student2.age=17;
student2.sex=FEMALE;
student2.next=NULL;
student2.lpBasicInformation.next=NULL;

student1.next=&student2;
student1.lpBasicInformation.next=&(student2.lpBasicInformation);

if(student1.next==(struct detail*)student1.lpBasicInformation.next)printf("Right");//一定不要忘记强制类型转换
return 0;
}

可以实现
struct student s1;
scanf("%c,%d",s1.name,s1.number);
注意输入时候以逗号分隔