2.指向一個由n個元素所組成的數(shù)組指針
在Turbo C中, 可定義如下的指針變量:
int (*p)[3];
指針p為指向一個由3個元素所組成的整型數(shù)組指針。在定義中,圓括號是不能少的, 否則它是指針數(shù)組, 這將在后面介紹。這種數(shù)組的指針不同于前面介紹的整型指針,當(dāng)整型指針指向一個整型數(shù)組的元素時,進(jìn)行指針(地址)加1運(yùn)算,表示指向數(shù)組的下一個元素,此時地址值增加了2(因?yàn)榉糯笠蜃訛?),而如上所定義的指向一個由3個元素組成的數(shù)組指針,進(jìn)行地址加1運(yùn)算時,其地址值增加了6(放大因子為2x3=6),
這種數(shù)組指針在Turbo C中用得較少,但在處理二維數(shù)組時, 還是很方便的。例如:
int a[3][4], (*p)[4];
p=a;
開始時p指向二維數(shù)組第0行,當(dāng)進(jìn)行p+1運(yùn)算時,根據(jù)地址運(yùn)算規(guī)則,此時放大因子為4x2=8,所以此時正好指向二維數(shù)組的第1行。和二維數(shù)組元素地址計(jì)算的規(guī)則一樣,*p+1指向a[0][1],*(p+i)+j則指向數(shù)組元素a[i][j]。
例:
int a[3][4]={
{1,3,5,7},
{9,11,13,15},
{17,19,21,23}
};
main()
{
int i,(*b)[4];
b=a+1; /* b指向二維數(shù)組的第1行, 此時*b[0]是a[1][0] */
for(i=1;i<=4;b=b[0]+2,i++) /* 修改b的指向, 每次增加2 */
printf(%d\t,*b[0]);
printf(\n);
for(i=0; i<3; i++)
{
b=a+i; /* 修改b的指向,每次跳過二維數(shù)組的一行 */
printf(%d\t,*(b[i]+1));
}
printf (\n);
}
程序運(yùn)行結(jié)果如下:
9 13 17 21
3 11 19
三、字符指針
我們已經(jīng)知道,字符串常量是由雙引號括起來的字符序列,例如:
a string
就是一個字符串常量,該字符串中因?yàn)樽址鸻后面還有一個空格字符,所以它由8個字符序列組成。在程序中如出現(xiàn)字符串常量C編譯程序就給字符串常量按排一存貯區(qū)域,這個區(qū)域是靜態(tài)的,在整個程序運(yùn)行的過程中始終占用, 平時所講的字符串常量的長度是指該字符串的字符個數(shù), 但在按排存貯區(qū)域時, C 編譯程序還自動給該字符串序列的末尾加上一個空字符'\0',用來標(biāo)志字符串的結(jié)束,因此一個字符串常量所占的存貯區(qū)域的字節(jié)數(shù)總比它的字符個數(shù)多一個字節(jié)。
Turbo C中操作一個字符串常量的方法有:
(1).把字符串常量存放在一個字符數(shù)組之中, 例如:
char s[]=a string;
數(shù)組s共有9個元素所組成,其中s[8]中的內(nèi)容是'\0'。實(shí)際上,在字符數(shù)組定義的過程中,編譯程序直接把字符串復(fù)寫到數(shù)組中,即對數(shù)組s初始化。
(2).用字符指針指向字符串,然后通過字符指針來訪問字符串存貯區(qū)域。當(dāng)字符串常量在表達(dá)式中出現(xiàn)時,
根據(jù)數(shù)組的類型轉(zhuǎn)換規(guī)則,它被轉(zhuǎn)換成字符指針。因此,若我們定義了一字符指針cp:
char *cp;
于是可用:
cp=a string;
使cp指向字符串常量中的第0號字符a, 如圖所示。
___________________________________
CP ----- | a | | s | t | r | i | n | g | \0|
|___|___|___|___|___|___|___|___|___|
以后我們可通過cp來訪問這一存貯區(qū)域, 如*cp或cp[0]就是字符a,而cp[i]或*(cp+i)就相當(dāng)于字符串的第i號字符,但企圖通過指針來修改字符串常量的行為是沒有意義的。
相關(guān)推薦:計(jì)算機(jī)等級考試二級C語言教程匯總計(jì)算機(jī)等級考試二級C語言常見知識點(diǎn)總結(jié)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |