建立一个结构
使用方式如下
struct 结构名称{ 结构变数;};
例如:
宣告时
struct Student_Data { char name[10]; int age;};
建立结构
根据C或C++分两种方式
Cstruct Student_Data stu;
C++Student_Data stu;
两个语法是不一样的。
宣告完后直接使用
strcpy(stu.name,"nick");stu.age = 25;printf("The student's name is: %s\n", stu.name);printf("The student's age is: %d\n", stu.age);
或是想要直接在宣告的时候就建立结构,也可以写成
struct Student_Data { char name[10]; int age;}stu;strcpy(stu.name,"nick");stu.age = 25;printf("The student's name is: %s\n", stu.name);printf("The student's age is: %d\n", stu.age);
那么若你只想要使用一次,struct结构名称也可以不用写
struct{ char name[10]; int age;}stu;strcpy(stu.name,"nick");stu.age = 25;printf("The student's name is: %s\n", stu.name);printf("The student's age is: %d\n", stu.age);
但这样如果你想要新宣告一个结构实体就不行了。
使用typedef
typedef 的其中一个用法,就是将一个资料型态取一个别名
于是我们也可以将上面的struct改成
typedef struct Student_Data { char name[10]; int age;}stu_data;
这么一来我们就把struct Student_Data这个型态,取了一个别名叫做stu_data
在使用的时候我们就不需要管他是C或是C++语法,利用别名宣告结构
stu_data stu; strcpy(stu.name,"nick");stu.age = 25;printf("The student's name is: %s\n", stu.name);printf("The student's age is: %d\n", stu.age);Linked list宣告C语言的宣告方式struct list { int data; struct list *next;};
那C++里面就不一定要加struct了
struct list { int data; list *next;};
要记住不管怎样struct list *型态都要是pointer,不然就重複宣告了
要用class的话也是一样
class Node {public: int data; Node* next;};
其他宣告方式可以参考[3]
建构函式
struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {} };
宣告ListNode node;
则会呼叫预设的建构函式 ListNode() : val(0), next(nullptr) {}
也可以透过ListNode node(1);
呼叫其他建构函式把member设值。
reference :
[1] http://c.biancheng.net/view/2031.html
[2] http://vincecc.blogspot.com/2013/10/cc-typedef-struct-typedef-struct.html
[3] http://ccd9527.blogspot.com/2014/04/typedef-link-list.html
[4] https://www.itread01.com/content/1549846821.html