| 特性 | 字符指針 | 字符數組 |
|---|---|---|
| 本質 | 變量,存地址 | 數組,存內容 |
| 初始化 | char *p = "str"; 無限制 | 需 static/外部 |
| 賦值 | p = "str"; 合法 | 需逐元素或 strcpy |
| 修改內容 | 不可(指向常量區) | 可修改 |
返回類型 (*指針名)(); // 如 int (*pf)();
int (*pmax)();pmax = max;z = (*pmax)(x, y);限制:不可算術運算;括號不可省。
返回類型 *函數名(參數) { ... }
// 如 int *ap(int x, int y)
返回指針值,類型說明符指明指向的數據類型。
char *day_name(int n) {
static char *name[] = {"Illegal day","Monday",...,"Sunday"};
return (n<1||n>7) ? name[0] : name[n];
}
int (*p)(); // 函數指針變量
int *p(); // 指針型函數聲明
前者括號綁定 *p,後者 * 綁定返回類型。
char *ps[] = {"BASIC","DBASE","C","FORTRAN","PASCAL"}; // 字符串指針數組
int *pi[10]; // 整型指針數組
// 基礎版
while ((*pds++ = *pss++) != '\0');
// 極簡版(利用 \0 為 0 假值)
void cpystr(char *pss, char *pds) {
while (*pds++ = *pss++);
}
指針相關概念是 C 語言靈活性的核心,區分指針變量、指針函數、函數指針、指針數組對於高級編程至關重要。