黑马程序员技术交流社区
标题:
C语言指向指针的指针
[打印本页]
作者:
靳小龙
时间:
2015-9-6 09:19
标题:
C语言指向指针的指针
如果一个指针变量存放的又是另一个指针变量的地址,则称这个变量为
指向指针的指针变量
或
指向指针的指针
。
如下图所示:
a 为 int 型变量,值为100;p1 指向 a,它的值是 a 的地址;p2 为指向指针的指针,它的值是 p1 的地址。
指向指针的指针定义方式一般为:
数据类型 **变量名;
例如:
int a =100;int *p1 = &a;int **p2 = &p1;int **p2;
可以理解为
int *(*p2);
。显然 *p2 是指针变量,如果前面没有 *,就是定义了一个指针整型数据的指针变量。现在它前面又有了一个 * 号,表示 p2 指向的是一个整型指针变量。*p2 就是 p2 所指向的另一个指针变量。
请看下面的输出结果:
#include
<stdio.h>
int
main
()
{
int
a
=
100
;
int
*
p1
=
&
a
;
int
**
p2
=
&
p1
;
printf
(
"a=%d, p1=%X, &p1=%X
\n
"
,
a
,
p1
,
&
p1
);
printf
(
"**p2=%d, *p2=%X, p2=%X
\n
"
,
**
p2
,
*
p2
,
p2
);
return
0
;
}
运行结果:
a=100, p1=28FF44, &p1=28FF40**p2=100, *p2=28FF44, p2=28FF40
指向指针的指针常用在二维数组中。请看下面的例子:
#include
<stdio.h>
int
main
()
{
char
*
name
[]=
{
"Follow me"
,
"BASIC"
,
"Great Wall"
,
"FORTRAN"
,
"Computer desighn"
}
;
char
**
p
=
name
;
printf
(
"*p=%s
\n
"
,
*
p
);
printf
(
"*(p+1)=%s
\n
"
,
*(
p
+1
));
printf
(
"**(p+1)=%c
\n
"
,
**(
p
+1
));
printf
(
"**(p+1)=%c
\n
"
,
*(*(
p
+2
)+
3
));
return
0
;
}
运行结果:
*p=Follow me
*(p+1)=BASIC
**(p+1)=B
**(p+1)=a
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2