作业帮 > 综合 > 作业

为什么子函数对从主函数中传进来的指针变量的改变返回到主函数中去后并没有 改变指针所指向的值?

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/16 19:23:10
为什么子函数对从主函数中传进来的指针变量的改变返回到主函数中去后并没有 改变指针所指向的值?
代码如下:
子函数:
int * Operation(int *head)
{
建立一个链表,head指向链表的头结点
return head;
}
主函数:
int main()
{
int *head;
while(head)
{
依次输出链表中的元素;
}
}
执行后程序会出现问题
但是若将head改为一个引用指针后,程序能够正常运行.
为什么子函数对从主函数中传进来的指针变量的改变返回到主函数中去后并没有 改变指针所指向的值?
你修改的到底是指针本身,还是指针所指向变量的值?
再问: 是指针本身啊!
再答: 那么你在子函数中所修改的指针,实在上只是指针的一个副本,对实际参数的那个指针没有影响,要修改指针的值,就得用二级指针作为参数,然后再对实际的一级指针进行修改,调用时就是要传入指针参数的地址。 例如有外部参数int* p; 有函数void fun(int** p){*p = malloc(1024);} 调用时就是fun(&p); 这样外部指针参数p的值才能被修改。 如果是在C++中,当然也可以使用指针的引用,即void fun(int* &p);这种样式,这样修改的也就是实际的指针。
再问: 那为什么将形参改为引用形式 (int *&head); 就可以了啊!
再答: 我前面不是补充说了吗?如果是直接的int* head这样声明的参数,这里生成的是一个实际参数的副本,所以无法修改外部的那个指针变量。 如果使用引用,int* &head,这样,传递的就是实际参数本身的引用,而不会生成一个新的副本,所以这样修改的就是实际上的那个指针参数。