指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的指针.....n级指针就是....

 p    *p   **p
                                      ---  ---  ----
                                      | |->| |->|  |
                                      ---  ---  |  |
                                                |  |
                                                ----

但是可能大家比较不容易理解的是,二级指针或者多级指针用在哪里呢?怎么使用呢?有没有必要用呢?

现在我就谈谈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=&
amp;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级指针的使用也是差不多这样了

这是本人的一点理解,如果有不对,希望大家多多指导。

最新文章

  1. 常用jQuery 方法
  2. C#知识点-委托
  3. 基于RulesEngine的业务规则实现
  4. hdu 1452 Happy 2004 膜拜这推导过程
  5. Linux作业控制
  6. JS数据类型&&typeof&&其他
  7. Bzoj 1756: Vijos1083 小白逛公园 线段树
  8. dedecms由子目录访问修改为根目录访问
  9. VMware 8安装苹果操作系统Mac OS X 10.7 Lion正式版
  10. STM32串口控制步进电机(原创)
  11. IDEA热部署(二)---jetty插件启动maven项目
  12. MyEclipse完善提示配置
  13. spring的定时器
  14. Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——
  15. web中icon 图标问题
  16. Vue2.5开发去哪儿网App 详情页面开发
  17. [路径规划] VFF和VFH
  18. html5的理解
  19. iOS: crush when save Core Data
  20. bootstrap修改勾选样式

热门文章

  1. Oracle 事务处理
  2. centos 6的LAMP一键安装包(可选择/升级版本)
  3. SpringBoot2.0之整合ElasticSearch
  4. Dispatcher initialization failedUnable to load configuration 解决办法
  5. C语言查找算法之顺序查找、二分查找(折半查找)
  6. Pandas字符串和文本数据
  7. scala学习手记26 - 重用函数值
  8. JAR_给别人使用
  9. 报错org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [bean.xml]
  10. 委托,lambda,匿名方法