计算机二级C语言辅导:指向指针的指针

文章作者 100test 发表时间 2007:03:10 17:46:03
来源 100Test.Com百考试题网


一个指针变量可以指向整型变量、实型变量、字符类型变量,当然也可以指向指针类型变量。当这种指针变量用于指向指针类型变量时,我们称之为指向指针的指针变量,这话可能会感到有些绕口,但你想到一个指针变量的地址就是指向该变量的指针时;这种双重指针的含义就容易理解了。下面用一些图来描述这种双重指针,见图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
#include
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("M",*(*p3 i))./*用指向指针的指针变量输出一维数组*/
printf("\n").来源:www.examda.com
for(p1=a.p1-a<10.p1 )/*用指向指针的指针变量输出一维数组*/
{
p3=&.p1.
printf("M",**p3).
}
printf("\n").
for(i=0.i<3.i )/*用指向指针的指针变量输出二维数组*/
{
p2=b[i].
p3=&.p2.
for(j=0.j<4.j )
printf("M",*(*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("M",**p3).
}
printf("\n").
}
}
程序的存储示意如图6-14所示,对一维数组a来说,若把数组的首地址即数组名赋给指针变量p1,p1就指向数组a,数组的各元素用p1表示为,*(p1 i),也可以简化为*p1 i表示。

相关文章


C语言的预处理程序与注释
C语言程序应用举例
计算机二级C语言辅导:指向指针的指针
计算机二级辅导:main函数的参数
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛