标签: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指向这个地址,可以使用。!!!!
标签:turn 并且 技术 .com 面经 main 存在 inf 可靠
原文地址:https://www.cnblogs.com/ghost-98210/p/9495430.html