VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 985|回复: 8

[原创] C语言二级指针

[复制链接]
79_avatar_middle
在线会员 发表于 2016-2-6 11:02:31 | 显示全部楼层 |阅读模式
指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的指针.....n级指针就是
但是可能大家比较不容易理解的是,二级指针或者多级指针用在哪里呢?怎么使用呢?有没有必要用呢?

    现在我就谈谈C指针的比较经常用到的地方:

我们都知道C语言中函数传递参数都是传递"值"的,如下:

void fun(void)

{

     int tmp = 0;

     change(tmp);

     printf("################ tmp = %d /n");

     return ;

}



void change(int tmp_t)

{

   tmp_t =1;

   return;

}

这个时候fun()中打印出来的tmp值还是0,因为我们传递的是“值”,如果你想在函数change()中修改这个tmp的值能在fun()中生效的话,那么就需要用指针来传递了如下:

void fun(void)

{

     int tmp = 0;

     change(&tmp);

     printf("################ tmp = %d /n");

     return ;

}



void change(int *tmp_t)

{

   *tmp_t =1;

   return;

}

这个时候fun()中打印出来的tmp值就是1了,因为我们此时传进来的是tmp的地址,所以我们在change()中tmp_t就是tmp的地址了,而对于*tmp_t的操作其实就是对tmp的操作了。

到这里的时候我们可以试想一下,我们通过传递指针来达到修改一个值的目的,那么当你需要修改一个指针的时候呢,这个时候我们就需要指针的指针了,如下:

int fun(void)

{

     int *buf ;

     int ret ;

     ret = mem_init(&buf);

     return ret;

}



int mem_init(int **buf_t)

{

  *buf_t = malloc(100);

  return 1;

}



通过上面我们可以发现,fun()函数通过调用men_init()函数来实现给buf分配内存空间的目的。首先buf是我们定义的一个指针,&buf则是指向buf的指针(二级指针),我们通过把&buf传递个men_init()函数,那么此时二级指针buf_t=&buf了,所以说buf_t是指向buf的指针,那么对于*buf_t的操作其实就是对buf的操作了,这样fun()就可以通过men_init()来分配内存了。

(补充一点:对于定义的int **buf_t中,二级指针buf_t=&buf,指向为buf(还是一个指针),一级指针*buf_t=buf,指向为*buf,

值**buf_t= *buf)

对于n级指针的使用也是差不多这样了

评分

参与人数 6驿站币 +8 热心值 +8 收起 理由
28_avatar_small 天下 + 1 + 1 感谢分享!
88_avatar_small 寂寞江湖 + 2 + 2 很给力!
11_avatar_small 饮水机 + 1 + 1 很给力!
16_avatar_small 阳光 + 1 + 1 赞一个!
65_avatar_small 编程者 + 2 + 2 很给力!
01_avatar_small 天下第一 + 1 + 1

查看全部评分





上一篇:const关键字用法之我见
下一篇:C++ 里大写TRUE和小写true区别
01_avatar_middle
在线会员 发表于 2016-2-6 13:27:00 | 显示全部楼层
谢谢分享啊C语言二级指针
08_avatar_middle
在线会员 发表于 2016-2-6 21:12:14 | 显示全部楼层
C语言二级指针
22_avatar_middle
在线会员 发表于 2016-2-7 10:41:54 | 显示全部楼层
C语言二级指针C语言二级指针C语言二级指针
58_avatar_middle
在线会员 发表于 2016-2-8 02:41:09 | 显示全部楼层
多级指针
00_avatar_middle
在线会员 发表于 2016-2-9 21:42:51 | 显示全部楼层
C语言二级指针C语言二级指针C语言二级指针C语言二级指针C语言二级指针
16_avatar_middle
在线会员 发表于 2016-2-11 13:29:53 | 显示全部楼层
受教了谢谢了
16_avatar_middle
在线会员 发表于 2016-4-2 16:08:44 | 显示全部楼层

正在学习ing中,
60_avatar_middle
在线会员 发表于 2016-5-17 17:40:34 | 显示全部楼层
现在我就谈谈C指针的比较经常用到的地方:
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-21 02:47

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表