struct Student {
char firstName[20];
std::string lastName;
int age;
bool gender;
int grade;
};
Student sprout1;
struct SproutStudent {
std::string name;
bool gender;
int grade;
} sprout;
struct {
std::string name;
bool gender;
int grade;
} sprout;
// 結構名稱 變數 = { 第一個成員的值, 第二個成員的值, ... };
SproutStudent sprout1 = {"chengscott", true, 87};
.
)sprout1.grade; // == 87
sprout1.gender = false;
->
)SproutStudent *s = &sprout1;
s->grade; // == 87
s->gender = true;
// [思考] 為什麼不用: *s.grade
// -> 和 . 運算子優先順序比 * 高
bool isPass(Student rhs); // 慢
bool isPass(Student* rhs); // 資料不安全
bool isPass(const Student* rhs) {
return rhs->grade >= 60;
}
bool isPass(const Student& rhs) {
return rhs.grade >= 60;
}
int totalGrade(Student rhs[]); // 資料不安全
int totalGrade(Student *rhs); // 資料不安全
int totalGrade(const Student rhs[]); // 安全
new
和 delete
運算子new
和 delete
Student *sprout = new Student;
// ...
delete sprout;
// sprout == nullptr
int n;
Student *stu = new Student[n];
delete[] stu;
new
使用之後記得 delete
delete
後的指標struct Node {
int data; // 節點資料
Node *next; // 指向下一個節點
};
Node *head_ = new Node;
head_
nullptr
)Node *cur;
cur = head_;
for (int i = 0; i < n; ++i) {
cur = cur->next;
}
cur->data; // 第 n 個
while (cur != nullptr) {
cur = cur->next;
}
cur->data; // 最後一個
p
節點的下一個節點為新節點del_node
節點指向 p
節點的下一個節點del_node
節點的下一個節點del_node
節點struct Node {
int data; // 節點資料
Node *prev; // 指向上一個節點
Node *next; // 指向下一個節點
};
#include <iostream>
struct Node {
int data;
Node* next;
};
int main(){
Node* head = new Node({0, NULL});
for(int i = 0 ; i < 5 ; i++){
Node* tmp = new Node({i+1, head});
head = tmp;
}
return 0;
}
實作 linked list 的一些操作