郑州做网站的公司有哪些,深圳网站建设 推荐xtdseo,汕头网页设计网站方案,手机网站制作一、问题
typedef struct
{int num;short age;stu next;
} *stu; 上述这段代码为什么编译出错#xff1f;⼀个结构体不可以包含指向⾃⼰的指针吗#xff1f;
二、解答 在C语⾔中#xff0c;⼀个结构体可以包含指向⾃⼰的指针#xff0c;例如这样⼀个结构体类型#xff1…一、问题
typedef struct
{int num;short age;stu next;
} *stu; 上述这段代码为什么编译出错⼀个结构体不可以包含指向⾃⼰的指针吗
二、解答 在C语⾔中⼀个结构体可以包含指向⾃⼰的指针例如这样⼀个结构体类型
struct person
{int id;char name[20];int age;struct person *next;
}; 在建⽴链表操作时⽤结构体变量做链表的结点在结构体中需要⾄少有⼀个指针类型⽤这个指针类型指向⾃⼰的结构体类型来存放下⼀个结点地址。 由此可知⼀个指针类型的成员既可以指向其他类型的结构体数据也可以指向⾃⼰所在的结构体类型的数据。 既然⼀个结构体可以包含指向⾃⼰的指针那么问题阐述中的代码错在哪⾥呢 stu 例⼦的错误主要出在声明 next 的时候 typedef 还没有定义可以先给这个⾃定义的结构体⼀个标签如 struct student 然后声明 next 为 struct student *类型或者对 typedef 类型和结构体类型分别定义。下⾯按照分别定义的⽅法对错误代码进⾏修改代码如下。
struct student
{int num;short age;struct student *next;
};
typedef struct student *stu; 说明 根据上述说明的修改⽅法还可以写出⼏种不同的正确代码。 三、总结 在学习C语⾔时有很多概念性的知识点要理解。typedef 定义是对⼀个数据类型定义别名例如 “ typedef int COUNT; ”就是将整型 int 定义为 COUNT⽽数据类型 int 是已经存在的类型。 那么当将 typedef 移植到⾃定义的结构体中定义时需要⾸先定义结构体 然后再使⽤ typedef 对⾃定义的结构体进⾏别名定义。遇到编译错误要寻找错误的答案 要分析问题可以找同类问题的正确的代码进⾏⽐较观察两者意义上的不同。