A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 靳小龙 中级黑马   /  2015-9-6 09:19  /  509 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果一个指针变量存放的又是另一个指针变量的地址,则称这个变量为指向指针的指针变量指向指针的指针如下图所示:


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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马