国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

指向指針的指針

2019-11-17 05:22:43
字體:
來源:轉載
供稿:網友
一個指針變量可以指向整型變量、實型變量、字符類型變量,當然也可以指向指針類型變量。當這種指針變量用于指向指針類型變量時,我們稱之為指向指針的指針變量,這話可能會感到有些繞口,但你想到一個指針變量的地址就是指向該變量的指針時;這種雙重指針的含義就輕易理解了。下面用一些圖來描述這種雙重指針,見圖6-13。
指向指針的指針(圖一)
在圖中,整型變量i的地址是&i,將其傳遞給指針變量p,則p指向i;實型變量j的地址是&j,將其傳遞給指針變量p,則p指向j;字符型變量ch的地址是&ch,將其傳遞給指針變量p,則p指向ch;整型變量x的地址是&x,將其傳遞給指針變量p2,則p2指向x,p2是指針變量,同
時,將p2的地址&p2傳遞給p1,則p1指向p2。這里的p1就是我們談到的指向指針變量的指針變量,即指針的指針。
指向指針的指針變量定義如下:
類型標識符**指針變量名
例如:float**ptr;
其含義為定義一個指針變量ptr,它指向另一個指針變量(該指針變量又指向一個實型變量)。由于指針運算符“*”是自右至左結合,所以上述定義相當于:
float*(*ptr);
下面看一下指向指針變量的指針變量怎樣正確引用。
[例6-27]用指向指針的指針變量訪問一維和二維數組。
#include<stdio.h>
#include<stdlib.h>
main()
{
int a[10],b[3][4],*p1,*p2,**p3,i,j;/是*p指3向指針的指針變量*/
for(i=0;i<10;i++)
scanf("%d",&a[i]);/*一維數組的輸入*/
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&b[i][j]);/*二維數組輸入*/
for(p1=a,p3=&p1,i=0;i<10;i++)
printf("/n");
for(p1=a;p1-a<10;p1++)/*用指向指針的指針變量輸出一維數組*/
{
p3=&p1;
printf("%4d",**p3);
}
printf("/n");
for(i=0;i<3;i++)/*用指向指針的指針變量輸出二維數組*/
{
p2=b[i];
p3=&p2;
for(j=0;j<4;j++)
printf("%4d",*(*p3+j));
printf("/n");
}
for(i=0;i<3;i++)/*用指向指針的指針變量輸出二維數組*/
{
p2=b[i];
for(p2=b[i];p2-b[i]<4;p2++)
{
p3=&p2;
printf("%4d",**p3);
}
printf("/n");
}
}
程序的存儲示意如圖6-14所示,對一維數組a來說,若把數組的首地址即數組名賦給指針變量p1,p1就指向數組a,數組的各元素用p1表示為,*(p1+i),也可以簡化為*p1+i表示。
假如繼續作將p3=&p1,則將p1的地址傳遞給指針變量p3,*p3就是p1。用p3來表示一維數組的各元素,只需要將用p1表示的數組元素*(p1+i)中的p1換成*p3即可,表示為*(*p3+i)。
指向指針的指針(圖二)
同樣,對二維數組b來說,b[i]表示第i行首地址,將其傳遞給指針變量p2,使其指向該行。
該行的元素用p2表示為*(p2+i)。若作p3=&p2,則表示p3指向p2,用p3表示的二維數組第i行元素為:*(*p3+i)。這與程序中的表示完全相同。
運行程序:
指向指針的指針(圖三)
[例6-28]利用指向指針的指針變量對二維字符數組的訪問。
#include<stdio.h>
#include<stdlib.h>
main()
{
int i;
staticcharc[][16]={"clanguage","fox","computer","homepage"};
/*二維字符數組*/
static char *cp[]={c[0],c[1],c[2],c[3]};指/*針數組*/
static char **cpp;/*指向字符指針的指針變量*/
cpp=cp;/*將指針數組的首地址傳遞給指向字符指針的指針變量*/
for(i=0;i<4;i++)/*按行輸出字符串*/
printf("%s/n",*cpp++);
printf("-----------/n");
for(i=0;i<4;i++)/*按行輸出字符串*/
{
cpp=&cp[i];
printf("%s/n",*cpp);
}
}
指向指針的指針(圖四)
程序中需要注重的是,執行cpp=cp是將指針數組的首地址傳遞給雙重指針,所以*(cpp+i)表示第i行的首地址,而不是cpp+i。在程序設計時一定分清。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 抚顺县| 吉水县| 宽城| 通化县| 革吉县| 连城县| 龙岩市| 香港 | 增城市| 阿克| 剑川县| 六安市| 本溪市| 东乡县| 沂水县| 清原| 广州市| 鄂伦春自治旗| 扎兰屯市| 都匀市| 南华县| 循化| 道真| 普宁市| 定州市| 泸水县| 芷江| 朝阳县| 昭平县| 离岛区| 惠安县| 华坪县| 五家渠市| 咸阳市| 秦皇岛市| 太仓市| 天柱县| 河北区| 凤阳县| 扎囊县| 扎囊县|