| 上下文 | 代碼示例 | 含義 |
|---|---|---|
| 二元運算符 | int area = 12 * 23; | 整數乘法 |
| 聲明符修飾 | int *p, *q; | 聲明指向 int 的指針變量 p、q |
| 一元運算符 | int val = *p; | 解引用:獲取 p 指向地址存儲的值 |
int *p; // p 是指針,*p 是 int
int *p, q; // p 是指針,q 是 int(常見陷阱)
int *p, *q; // 正確:兩個都是指針
建議:一行聲明一個變量,或統一寫成 int* p, *q;(風格爭議大,團隊統一即可)。
struct Node { int val; struct Node* next; };
struct Node* head = malloc(sizeof(*head));
head->val = 42; // 等價於 (*head).val = 42;
*head = (struct Node){42, NULL}; // 整體賦值
int a = 10;
int *p = &a;
int **pp = &p;
printf("%d\n", **pp); // 10
const int* p vs int* const p
const int* p; // 指向常量的指針:不可通過 p 修改值,p 可變
int* const p; // 常量指針:p 不可變,可通過 p 修改值
const int* const p;// 兩者皆不可變
口訣:const 修飾右側的實體(若右無則修飾左側)。