- 0.参考
- 1.结构体创建与访问
- 2.结构体指针
- 3.typedef 关键字
- 4.初始化
- 4.1 通过冒号初始化
- 4.2 直接初始化
- 4.3 构造函数初始化
菜鸟教程-数据结构
https://blog.csdn.net/weixin_43914889/article/details/107869575
1.结构体创建与访问参考如下代码,包含了结构体类型的创建、声明、赋值、函数传参的方法,与 C 大同小异。
#include2.结构体指针#include using namespace std; // 声明一个结构体类型 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(nullptr) {} }; void printNode2(struct ListNode node) { cout << "val2 : " << node.val < struct ListNode n2 = {2}; // 初始化 n2.val = 22; // 赋值 // 输出 Node 信息 printNode2(n2); return 0; }
定义指向结构的指针
ListNode *n1;
在上述定义的指针变量中存储结构变量的地址
n1 = new ListNode(1);
使用指向该结构的指针访问结构的成员
n1->val = 11;
于是,我们便可以对上述代码进行优化,将传递结构体对象改为传递结构体指针,从而减少内存空间的占用
#include3.typedef 关键字#include using namespace std; // 声明一个结构体类型 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(nullptr) {} }; void printNode1(struct ListNode *node) { cout << "val1 : " << node->val < struct ListNode *n1 = new ListNode(1); struct ListNode n2 = {2}; n1->next = &n2; n1->val = 11; n2.val = 22; // 输出 Node 信息 printNode1(n1); printNode1(n1->next); return 0; }
下面是一种更简单的定义结构的方式,您可以为创建的类型取一个"别名"。例如:
typedef struct ListNode {
int val; // 节点值
ListNode *next; // 后继节点引用
ListNode(int x) : val(x), next(NULL) {}
}ListNode ;
现在,您可以直接使用 Books 来定义 Books 类型的变量,而不需要使用 struct 关键字。下面是实例:
ListNode n1, n2;
您可以使用 typedef 关键字来定义非结构类型,如下所示:
typedef long int *pint32; pint32 x, y, z;
x, y 和 z 都是指向长整型 long int 的指针。
4.初始化 4.1 通过冒号初始化形如:
结构体名(传入参数): 成员变量1(参数1),成员变量2(参数2){};
这是一个链表的节点:
struct ListNode {
int val; // 节点值
ListNode *next; // 后继节点引用
ListNode(int x) : val(x), next(NULL) {}
};
实例化方法如下:
// 实例化节点 ListNode *n1 = new ListNode(4); // 节点 head ListNode *n2 = new ListNode(5); ListNode *n3 = new ListNode(1); // 构建引用指向,形成链表 n1->next = n2; n2->next = n3;4.2 直接初始化
直接在初始化时在{}中传入对应参数值即可
ListNode n4 = {2, NULL};
4.3 构造函数初始化
在上一章的学习中,我们学会了类的构造函数初始化方法,结构体构造函数初始化方法与其类似。
typedef struct Entry{
int _key;
int _value;
Entry(int key,int value){
this->_key = key;
this->_value = value;
}
};
int main(){
Entry b(2,3);
cout<< b._key << b._value <


