一、枚舉


什麼是枚舉?

枚舉(enumeration) 是一種用户自定義的數據類型,用於定義一組命名的整型常量,提高代碼的可讀性和可維護性。

普通枚舉

enum Color {
    RED,        // 默認值為 0
    GREEN,      // 1
    BLUE        // 2
};
  • 枚舉值默認從 0 開始依次遞增;
  • 也可以顯式指定值:
enum Status {
    OFF = 0,
    ON = 1,
    PENDING = 5,
    ERROR       // 自動為 6
};

使用

/*
 枚舉
*/
#include<iostream>
using namespace std;

// 開發中經常用
// 枚舉只是用於開發的一個約定,其實只是為了編譯報錯,本質枚舉就是一個 int
enum sex {
    MAN = 11,WOMAN = 22
};

// 聯合體用的比較少
union id {
  char id_str[10];
  long id_long;
};

struct student {
    union id id;
    string name;
    int age;
    enum sex std_sex;
    double scorce;
};

int main(){

    struct student student1;
    student1.id.id_long = 20251023;
    student1.name = "xaye";
    student1.age = 27;
    student1.std_sex = MAN;
    student1.scorce = 99;

    cout << " id.id_long : " << student1.id.id_long << ", std_sex : "
    << student1.std_sex << endl;

    return 0;
}
xaye@orange:~/code/dev/12$ ./a.out 
 id.id_long : 20251023, std_sex : 11

⚠️ 注意:普通枚舉的常量在全局作用域中,可能與其他枚舉或變量名衝突。


二、C++指針


什麼是指針?

指針 是一個變量,其值為另一個變量的 內存地址。通過指針,可以直接訪問和操作內存中的數據。

基本語法

int x = 10;
int* p = &x;   // p 是指向 int 類型的指針,存儲 x 的地址
  • &:取地址運算符(獲取變量的地址)
  • *:解引用運算符(訪問指針所指向的值)
cout << *p;  // 輸出 10(即 x 的值)
*p = 20;     // 修改 x 的值為 20

空指針與野指針

  • 空指針(nullptr):不指向任何有效地址(C++11 推薦使用 nullptr,而非 NULL 或 0):
int* p = nullptr;
if (p == nullptr) { /* 安全檢查 */ }
  • 野指針:指向已釋放或無效內存的指針,使用會導致未定義行為(應避免)。
/*
 指針:C++裏面遇到的第一個難點,也是最重要的一點!!!
*/
#include<iostream>
using namespace std;

int main() {
    // 數據是存儲在內存條的某一個位置
    int number = 1;
    // int*: 指針類型, &: 取地址的操作符
    int* number_point = &number;

    // number: 1, number_point: 0x7fff9fd5e9cc
    cout << "number: " << number << ", number_point: " << number_point << endl;

    // 通過指針可以做一些操作,通過指針 * 可以間接操作變量賦值
    *number_point = 10;
    cout << "number: " << number << ", number_point: " << number_point << endl;
    return 0;
}

我的理解是把一個變量當作一個硬幣,它的正面是他的值,反面是它的地址,(*) 就相當於把他反轉過來看到了它的地址,(*地址)就相當於繼續反轉 就又看見了他的值。

xaye@orange:~/code/dev/12$ ./a.out 
number: 1, number_point: 0x7ffc69f4ddec
number: 10, number_point: 0x7ffc69f4ddec

指針是存儲內存地址的變量,用於間接訪問和操作數據,功能強大但需謹慎使用。