码迷,mamicode.com
首页 > 编程语言 > 详细

c语言指针的指针

时间:2018-08-17 22:21:46      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:turn   并且   技术   .com   面经   main   存在   inf   可靠   


c语言在函数传递时常常使用如下的形式。
1 void get(int **p)

对于这个形式,我想过为什么不能够使用 *p 作为形参呢。下面我们看一下代码和执行结果

 1 void get(int **p)
 2 {
 3     printf("%p\n",*p);
 4     *p = (int *)malloc(sizeof(int) * 5);
 5     printf("%p\n",*p);
 6 }
 7 
 8 int main()
 9 {
10     int *ptr = NULL;
11     printf("%p\n",ptr);
12     get(&ptr);
13     printf("%p\n",ptr);
14     return 0;
15 }

 技术分享图片

由这个结果可以看出一开始ptr初始化为NULL,后面经过get()函数以后ptr的指针为00511448,包括后面的函数退

出以后ptr的值也是00511448 。但是下面指传入指针的结果相比较,我们就可以发现问题了。

 

 1 void get(int *p)
 2 {
 3     printf("%p\n",p);
 4     p = (int *)malloc(sizeof(int) * 5);
 5     printf("%p\n",p);
 6 }
 7 
 8 int main()
 9 {
10     int *ptr = NULL;
11     printf("%p\n",ptr);
12     get(ptr);
13     printf("%p\n",ptr);
14     return 0;
15 }

技术分享图片

 在上面的结果看出来,函数结束以后,ptr的值为00000000了,不再和上面的结果一样。

 


 

从这里我们可以看出来问题了。传入的是指针的值,值是可以改变的。所以在后面函数结束以后ptr的值就被改变

了。如果后面我们需要用到这个指针,那么得到的结果就是错误的,是不可靠的 ;所以我们需要向函数中传递一

个地址,然后在函数结束后,内部分配的地址就依然存在并且ptr指向这个地址,可以使用。!!!!

c语言指针的指针

标签:turn   并且   技术   .com   面经   main   存在   inf   可靠   

原文地址:https://www.cnblogs.com/ghost-98210/p/9495430.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!