struct A { char c; double d; char arr[9]; };
// c: offset 0, size 1
// d: offset 8 (對齊 8), size 8
// arr: offset 16 (對齊 1), size 9 → 總計 24 (對齊 8 的倍數)
sizeof(A) == 24
struct String { char* p; int len; };
String s1; s1.p = new char[10]; strcpy(s1.p, "hello");
String s2 = s1; // 預設複製指針值
s2.p[0] = 'H'; // s1.p[0] 也變成 'H' —— 共享內存!
String s2; s2.len = s1.len; s2.p = new char[s1.len]; strcpy(s2.p, s1.p); // 分配新內存並複製內容 s2.p[0] = 'H'; // s1 不受影響
若類管理資源(動態內存、文件句柄等),必須自定義:**複製構造函數、複製賦值運算符、析構函數**(C++11 還有移動構造/賦值)。
#define MAXN 100
typedef char DataType;
struct Queue {
DataType data[MAXN];
int front, rear; // front 指向隊頭,rear 指向隊尾下一位
};
void init(Queue* q) { q->front = q->rear = 0; }
bool empty(Queue* q) { return q->front == q->rear; }
bool push(Queue* q, DataType x) {
if ((q->rear + 1) % MAXN == q->front) return false; // 滿
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAXN;
return true;
}
bool pop(Queue* q, DataType* out) {
if (empty(q)) return false;
*out = q->data[q->front];
q->front = (q->front + 1) % MAXN;
return true;
}
核心功能:動態擴容、查找/替換/插入/刪除(字符/子串)、大小寫轉換、分割/連接。
class MyString {
char* data;
int len, cap;
public:
MyString(const char* s = "") { /* 複製構造 */ }
~MyString() { delete[] data; }
MyString(const MyString& other) { /* 深拷貝 */ }
MyString& operator=(const MyString& other) { /* 深拷貝賦值 */ }
void push_back(char c) { /* 擴容邏輯 */ }
void append(const MyString& s) { /* 擴容+拷貝 */ }
int find(char c) const { /* 線性查找 */ }
int find(const MyString& s) const { /* KMP 或朴素匹配 */ }
void insert(int pos, char c) { /* 移動數據+擴容 */ }
void erase(int pos, int count) { /* 移動數據 */ }
void replace(char old_c, char new_c) { /* 遍歷替換 */ }
// ... 其他工具函數
};
cap = max(cap*2, needed),realloc 或 new+copy+delete。\\0 維護。split(sep) 返回 vector,join(vec, sep) 反向操作。本文涵蓋 C/C++ 基礎設施構建的四大核心主題:內存佈局控制、資源管理語義、數據結構封裝、字符串處理庫。掌握這些「造輪子」能力,不僅能應對面試手寫代碼,更能深入理解 STL 容器與標準庫的底層邏輯,寫出高效、健壯的系統級代碼。