C/C++ struct使用

建立一个结构

使用方式如下

struct 结构名称{
    结构变数;
};

例如:
宣告时

struct Student_Data {
    char name[10];
    int age;
};

建立结构
根据C或C++分两种方式
C
struct 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


<<:  TypeScript - 入坑安装指南

>>:  OpenPose 安装笔记

Dungeon Mizarka 009

整理进入Addressable资料 前几天利用Addressable进入载入资料时手动的将需要用到的...

Day 30 Python3 + selenium 撷取网站状态快照

Python3 + selenium 撷取网站状态快照 系统更新与软件服务预装 $ sudo apt...

011-快捷键

今天来分享一些简易的快捷键,因为自己本身是从 adobe 相关软件摸熟之後,才开始接触 figma ...

9.unity物件侦测(碰撞Collider2D)

碰撞器2D (参阅Collider 2D) 碰撞器可以让物体碰撞停下、设定障碍物;也可以达成捡金币、...

菜鸡用 Phaser 拾起童年游戏 28

哈罗哈罗~我们的铁人赛也快到了尾声,今天要给大家介绍一个 template,可以让我们在制作的时候更...