为什么子函数对从主函数中传进来的指针变量的改变返回到主函数中去后并没有 改变指针所指向的值?
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/16 19:23:10
为什么子函数对从主函数中传进来的指针变量的改变返回到主函数中去后并没有 改变指针所指向的值?
代码如下:
子函数:
int * Operation(int *head)
{
建立一个链表,head指向链表的头结点
return head;
}
主函数:
int main()
{
int *head;
while(head)
{
依次输出链表中的元素;
}
}
执行后程序会出现问题
但是若将head改为一个引用指针后,程序能够正常运行.
代码如下:
子函数:
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,这样,传递的就是实际参数本身的引用,而不会生成一个新的副本,所以这样修改的就是实际上的那个指针参数。
再问: 是指针本身啊!
再答: 那么你在子函数中所修改的指针,实在上只是指针的一个副本,对实际参数的那个指针没有影响,要修改指针的值,就得用二级指针作为参数,然后再对实际的一级指针进行修改,调用时就是要传入指针参数的地址。 例如有外部参数int* p; 有函数void fun(int** p){*p = malloc(1024);} 调用时就是fun(&p); 这样外部指针参数p的值才能被修改。 如果是在C++中,当然也可以使用指针的引用,即void fun(int* &p);这种样式,这样修改的也就是实际的指针。
再问: 那为什么将形参改为引用形式 (int *&head); 就可以了啊!
再答: 我前面不是补充说了吗?如果是直接的int* head这样声明的参数,这里生成的是一个实际参数的副本,所以无法修改外部的那个指针变量。 如果使用引用,int* &head,这样,传递的就是实际参数本身的引用,而不会生成一个新的副本,所以这样修改的就是实际上的那个指针参数。
指针变量的内容是表示所指向的变量的值还是表示所指向的变量呢?
定义指针变量时必须说明其() ,以确定该指针变量所指向的变量的类型.
怎样找函数指针所指向的函数,怎样看具体的定义啊
参数是变量,指针的函数调用 void fun(int a,int*b);在函数中对a,b进行修改,返回后观察其结果
怎么获得一个指针变量所指向的地址的值
matlab的子函数中涉及一个变量,在主函数中会进行赋值,在子函数中怎样定义
指针的数据类型为什么要跟所指向的数据的类型一致,不是说所有的指针变量占用的内存大小是相同的吗?
定义一个返回值是指向函数的指针且有一个指向函数的指针作为参数的函数?
为什么定义函数指针指向函数 该指针的值不为函数名的值
指向常量的指针也可以指向变量,为什么?既然指向变量,变量的值可以改变,那么不是很矛盾吗?
主函数中定义的变量在子函数中是否有效?
Java大神请进!如何从子函数返回到主函数中?