为考研读懂C定义的代码而重新学习C语言
1.结构体的定义
首先来回顾一下C语言种的结构体:
使用关键字struct来定义。
//定义顺序表数据类型
struct SeqList{
int MAXNUM;//顺序表可以存放元素的最大个数
int n;//顺序表实际存储的元素个数
DataType * element; //存储线性表的元素,这里采用指针来表示,其实也可以表示为数组(DataType在这里表示泛指元素的数据类型)
};//此处的“;”一定不能忘记!!!
2.结构体的访问
首先来讨论如何定义结构体变量:其实结构体就是我们程序员自定义的一种数据类型,其和内置的数据类型(int ,char,float,double等)在声明变量部分并无二至。即和正常的声明变量一样,大胆声明即可。在C语言种有个有趣的关键字typedef,给类型起别名
//接上面定义的结构体SeqList
struct SeqList seqList;// 声明结构体变量
struct SeqList *PSeqList;//声明结构体指针变量
所以也就结构体就有了如下3种访问结构体成员的方式:
1. seqList.成员名; //结构体变量.成员名
2. *PSeqList.成员名; //(*指针变量名).成员名
3. PSeqList = &seqList;
PSeqList ->成员名 //指针变量名 -> 成员名
3.进入数据结构的顺序表部分
//创建空顺序表
1.将顺序表的指向结构体SeqList 的指针起个别名
typedef struct SeqList *PSeqList;
2.创建新的顺序表
PSeqList createNullList_seq(int m){
//1.创建新的顺序表,分配内存
PSeqList palist = (PSeqList)malloc(sizeof(struct SeqList));
//2.判断palist是否开辟内存成功
if(palist != NULL){
//3.为顺序表中定义的数组element开辟内存
palist -> element = (DataType* ) malloc(sizeof(DataType)*m);
//注意这里的if判断条件if,下面会专门讲解
if(palist-> element){
//4.分配内存成功,为结构体中的MAXNUM和n赋初值
palist -> MAXNUM = m;
palist -> n = 0;//空表长度为0
return palist;//一切正常返回 正常的结果
}else {
//如果palist-element为NULL,则释放palist的内存空间
free(palist);
}
//5.处理分配内存失败的情况
printf("Out of space!\n");//分配内存失败
return NULL;
}
/**
* 上述代码综合来看写得逻辑清晰,易于理解,
*但在处理判空问题上,两次if其实的逻辑是一样的,但
*作者在这里采用的两种写法,会让初学者(C还给老师的“Freshman”迷茫)。瑕不掩瑜,作者对于失败情况的处理*还是非常到位的,而没有使用无谓的else.
*/
4.简要谈一下C语言中让你迷茫的if判断
C语言中是没有boolean类型的,而是使用0代表逻辑假,非0代表逻辑真。所以我们经常看到的if(n) 等价于 if (n!=0) 或者是 if(n != NULL)两种情况;
- if (n) 等价于 if (n != 0);
- if(n != NULL) 等价于 if(n != NULL)
网友评论