3.字符指針
我們已經知道,字符串常量是由雙引號括起來的字符序列,例如:
"a string"
就是一個字符串常量,該字符串中因為字符a後面還有一個空格字符,所以它由8個字符序列組成。在程序中如出現字符串常量C編譯程序就給字符串常量按排一存貯區域,這個區域是靜態的,在整個程序運行的過程中始終占用,平時所講的字符串常量的長度是指該字符串的字符個數,但在按排存貯區域時,C編譯程序還自動給該字符串序列的末尾加上一個空字符'\0',用來標志字符串的結束,因此一個字符串常量所占的存貯區域的字節數總比它的字符個數多一個字節。
Turbo C中操作一個字符串常量的方法有:
(1).把字符串常量存放在一個字符數組之中,例如:
char s[]="a string";
數組s共有9個元素所組成,其中s[8]中的內容是'\0'。實際上,在字符數組定義的過程中,編譯程序直接把字符串復寫到數組中,即對數組s初始化。
(2).用字符指針指向字符串,然後通過字符指針來訪問字符串存貯區域。當字符串常量在表達式中出現時,根據數組的類型轉換規則,它被轉換成字符指針。因此,若我們定義了一字符指針cp:
char *cp;
於是可用:
cp="a string";
使cp指向字符串常量中的第0號字符a,如圖7.所示。
cp
┏━━━┓ ┏━┳━┳━┳━┳━┳━┳━┳━┳━┓
┃ ─╂─→ ┃a ┃ ┃s ┃t ┃r ┃i ┃n ┃g ┃\0┃
┗━━━┛ ┗━┻━┻━┻━┻━┻━┻━┻━┻━┛
圖7.
以後我們可通過cp來訪問這一存貯區域,如*cp或cp[0]就是字符a,而cp[i]或*(cp+i)就相當於字符串的第i號字符,但企圖通過指針來修改字符串常量的行為是沒有意義的。