问题描述
- C语言结构体数组与顺序表的问题
-
#define DataType struct students cla[3]struct students
{
long code;
char *name;
float score[3];
float sum;
};typedef struct
{
DataType list[MaxSize];
int length;
}SeqList;SeqList *t;
我要修改到list[0]里结构体数组cla[0]中的code元素,应该怎么写??
下面的代码可以吗?
scanf("%d",t->cla[0]->list[0].code);
解决方案
貌似define那里就过不去。。
解决方案二:
#define 与 typedef
#define PI 3.14 这样程序后面所有的PI 都会被替换换为3.14,这样可以加强程序的健壮性,如果你想把PI 改为3.1415的时候,比你去程序找出所有的
3.14好多了。
typedef 是给一个已有的类型取一个别名, 比如
typedef int integer;那程序中所有的integer 都等价于int
int a;和integer a 是一样的
你的程序中DataType 在后面才声明,c中药各个函数和变量要先声明后使用,而且写的先后也不对,
解决方案三:
感觉这句话“我要修改到list[0]里结构体数组cla[0]中的code元素”描述的数据结构有点混乱。
你是要建立一个顺序链表SeqList,顺序链表的节点是 students结构体变量。
#define MaxSize 3
typedef struct students
{
long code;
char *name;
float score[3];
float sum;
}DataType ;
typedef struct
{
DataType list[MaxSize];
int length;
}SeqList;
SeqList *t;
scanf("%d",t->list[0].code);//这里你只用SeqList *t定义了指针变量,而t指向的结构体SeqList变量的存储空间未定义,需要用malloc( )你开辟SeqList存储空间~
//#define DataType struct students cla[3] ,但DataType 在后面才声明,编译器会报错~
解决方案四:
SeqList *t;只是定义,还未初始化。也就是还未分配空间。
请先初始化。