萌导航

8.10C语言指向指针的指针

作者: 叶子 来源: 怪哈哈网 日期: 2015-09-29 10:16:19 人气: -

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


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 所指向的另一个指针变量。

请看下面的输出结果:

  1. #include <stdio.h>
  2. int main(){
  3. int a =100;
  4. int *p1 = &a;
  5. int **p2 = &p1;
  6. printf("a=%d,    p1=%X,  &p1=%X\n", a, p1, &p1);
  7. printf("**p2=%d, *p2=%X, p2=%X\n", **p2, *p2, p2);

  8. return 0;
  9. }

运行结果:

a=100,    p1=28FF44,  &p1=28FF40
**p2=100, *p2=28FF44, p2=28FF40


指向指针的指针常用在二维数组中。请看下面的例子:

  1. #include <stdio.h>
  2. int main(){
  3. char *name[]={
  4. "Follow me",
  5. "BASIC",
  6. "Great Wall",
  7. "FORTRAN",
  8. "Computer desighn"
  9. };
  10. char **p=name;
  11. printf("*p=%s\n", *p);
  12. printf("*(p+1)=%s\n", *(p+1));
  13. printf("**(p+1)=%c\n", **(p+1));
  14. printf("**(p+1)=%c\n", *(*(p+2)+3));
  15. return 0;
  16. }

运行结果:
*p=Follow me
*(p+1)=BASIC
**(p+1)=B
**(p+1)=a


转载请注明文章来源(欢迎分享): http://www.guaihaha.com/c/5624.html

相关内容

HTML5游戏 HTML5游戏
关于怪哈哈
怪哈哈是一个集搞笑,美女,动漫,游戏,技术等为核心的综合性网站!
联系我们
商务洽谈、广告合作、友情链接、侵权举报,这些都可以联系我们哦!
关于我们 - 联系我们 - 广告服务 - 免责申明  
本站文字和图片均为严格审查筛选收藏,均收集整理于互联网,其著作权归原作者所有,如果有侵犯您权利的照片,请来信告知,我们将及时撤销相应文字和图片。
Copyright @2014-2020 怪哈哈网 All Rights Reserved。
【谢谢大家一直支持贵站!】