导图社区 数据结构(指针)
关于数据结构中,形参和实参的问题,通过思维导图一起来了解一下。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
函数参数
实质
主函数内,定义一个变量,为变量开辟空间
主函数内实参改变
形参开辟空间,空间内是地址,函数对形参的改变都是对实参的改变
主函数内实参不变
形参开辟空间,空间内是值,函数调用完成,释放空间
值传递
传递变量的值
实参: 传递变量的值x给形参
形参:
为接收的变量x重新开辟一个空间
将变量的值x赋值到这个空间内
子函数内对该变量的操作都是对新开辟空间内数的操作
子函数运行完毕,释放新开辟的空间
注意:
新开辟空间的节点x的地址与实参x的地址不一样
主函数内,x地址所在的值,没有变化,子函数对主函数内x的操作无效
如果执意调用,那么与不调用一样
地址传递
指针
实参:
实参传递的是地址
例如:&a,数组为a
形参定义的是指针
例如: int *p,数组为 int p[]
形参开辟的空间内存放的是实参的地址
子函数对形参的使用,就是根据形参中的地址,间接改变实参的值
指针的引用(c++)
链表(自定义函数)
例子: typedef struct student {}node, *list
实参
主函数内: list l; creat( l);
形参
子函数: void creat( list &l ){}
子函数内 虽然有&,在子函数内,可以忽略
地址传递应用举例
链表
栈
例子: pop(stack *l, int *x)
入栈
push(stack *l, int x)
例子: main中有a[3]={1,2,0},定义push函数放入一个数
将e给这个数组
也就是,外界的值给实参,实参的值改变
子函数运行结束,实参的值已经改变
出栈
方式1:
子函数为 pop(stack *l, int x)
主函数内为: e=pop(l,x)
形参给x开辟空间,取出的数,放入空间内
子函数调用结束,新开辟空间释放
主函数内e=pop(l,x) ,x的值没有给e,e调不调用一样
方式2:
子函数为pop(stack *l, int *x)
主函数内为: e=pop(l,&x)
取出的值给了x,相当于给了e