黑马程序员技术交流社区

标题: 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